feat: 대전(daejeon)을 울산(ulsan)으로 개편 및 전체 7개 광역 지역(seoul, gyeonggi, incheon, gwangju, busan, daegu, ulsan) 세팅 완료

This commit is contained in:
2026-10-15 12:41:19 +09:00
parent 2dcb2ae8e8
commit 655a0f8177
318 changed files with 107890 additions and 4 deletions
+6
View File
@@ -0,0 +1,6 @@
.nuxt
.output
node_modules
.git
.env
npm-debug.log
+5
View File
@@ -0,0 +1,5 @@
node_modules
.nuxt
.output
.env
.env.*
+25
View File
@@ -0,0 +1,25 @@
# Build stage
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Production runner stage
FROM node:20-alpine
WORKDIR /app
ENV NODE_ENV=production
ENV PORT=80
ENV HOST=0.0.0.0
COPY --from=builder /app/.output ./.output
EXPOSE 80
CMD ["node", ".output/server/index.mjs"]
+63
View File
@@ -0,0 +1,63 @@
<template>
<div class="site-wrapper">
<!-- Header는 사용자 요청에 의해 제외 -->
<main class="site-main">
<NuxtPage />
</main>
<AppFooter />
</div>
</template>
<script setup>
// Header 없는 클린 랜딩 구조
</script>
<style>
/* Reset & Base Layout */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
font-family: "Pretendard", -apple-system, BlinkMacSystemFont, system-ui, Roboto, "Helvetica Neue", "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", sans-serif;
font-size: 16px;
line-height: 1.5;
color: var(--text-color, #1e293b);
background-color: var(--bg-body, #ffffff);
-webkit-text-size-adjust: 100%;
word-break: keep-all;
overflow-x: hidden;
}
body {
width: 100%;
min-width: 280px;
overflow-x: hidden;
background-color: var(--bg-body, #ffffff);
}
.site-wrapper {
display: flex;
flex-direction: column;
min-height: 100vh;
width: 100%;
overflow-x: hidden;
}
.site-main {
flex: 1;
width: 100%;
}
a {
color: inherit;
text-decoration: none;
}
button, input, select, textarea {
font-family: inherit;
font-size: inherit;
}
</style>
+93
View File
@@ -0,0 +1,93 @@
<template>
<footer class="site-footer">
<div class="footer-container">
<div class="footer-info">
<h4 class="footer-brand">{{ siteName }}</h4>
<p class="footer-meta">
전국 초·중·고 1:1 맞춤 방문과외 및 실시간 화상코칭 서비스 | 대표번호: 010-5961-5807<br />
사업자등록번호: 123-45-67890 | 통신판매업신고: 제2026-서울강남-0123호 | 개인정보관리책임자: 교육연구소<br />
주소: 서울특별시 강남구 테헤란로 123 비전타워 4층
</p>
<p class="footer-copy">
Copyright © 2026 {{ siteName }}. All rights reserved.
</p>
</div>
<div class="footer-links">
<a href="#consult-section" class="f-link">무료상담신청</a>
<span class="f-divider">|</span>
<span class="f-link">이용약관</span>
<span class="f-divider">|</span>
<span class="f-link"><strong>개인정보처리방침</strong></span>
</div>
</div>
</footer>
</template>
<script setup>
const config = useRuntimeConfig()
const siteName = config.public.siteName || '쌤인증'
</script>
<style scoped>
.site-footer {
background: var(--footer-bg, #0f172a);
color: #94a3b8;
padding: clamp(30px, 5vw, 50px) 16px;
font-size: clamp(0.72rem, 1.8vw, 0.82rem);
border-top: 1px solid rgba(255, 255, 255, 0.08);
}
.footer-container {
max-width: 1080px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 24px;
flex-wrap: wrap;
}
.footer-info {
flex: 1 1 500px;
}
.footer-brand {
font-size: clamp(1rem, 2.4vw, 1.15rem);
font-weight: 800;
color: #ffffff;
margin-bottom: 8px;
}
.footer-meta {
line-height: 1.6;
margin-bottom: 12px;
word-break: keep-all;
}
.footer-copy {
color: #64748b;
}
.footer-links {
display: flex;
align-items: center;
gap: 10px;
flex-shrink: 0;
}
.f-link {
color: #cbd5e1;
}
.f-divider {
color: #475569;
}
@media (max-width: 640px) {
.footer-container {
flex-direction: column;
gap: 16px;
}
}
</style>
+223
View File
@@ -0,0 +1,223 @@
<template>
<section class="coaching-section">
<div class="coaching-inner">
<div class="coaching-text">
<span class="coaching-badge">과외 시간 외에도 이어지는 케어</span>
<h2 class="coaching-title">주 2회 과외로 끝나지 않는<br /><strong>'1:1 메타인지 플래너 코칭'</strong></h2>
<p class="coaching-desc">
성적은 수업 시간이 아니라 <strong>스스로 복습하는 시간</strong>에 결정됩니다. 전담 선생님이 매일 카카오톡으로 일일 플래너를 점검하고 피드백을 전달합니다.
</p>
<div class="coaching-points">
<div class="cp-item">
<span class="cp-tag">01</span>
<div>
<h4 class="cp-title">주간·일일 스터디 플래너 설계</h4>
<p class="cp-desc">학교 수업 복습, 과제량, 취약 단원 보충 분량을 학생 능력에 맞춰 쪼개어 배분합니다.</p>
</div>
</div>
<div class="cp-item">
<span class="cp-tag">02</span>
<div>
<h4 class="cp-title">매일 학습 인증 & 밀착 피드백</h4>
<p class="cp-desc">학생이 푼 오답 노트와 플래너 사진을 확인하고 격려와 질문 해결을 진행합니다.</p>
</div>
</div>
<div class="cp-item">
<span class="cp-tag">03</span>
<div>
<h4 class="cp-title">월간 학부모 정기 리포트 발송</h4>
<p class="cp-desc">출결, 단원별 이해도, 성취도 변화 그래프를 투명하게 정리하여 학부모님께 보고합니다.</p>
</div>
</div>
</div>
</div>
<div class="coaching-visual">
<div class="visual-card">
<div class="vc-header">
<span class="vc-tag">REAL SCORE UP</span>
<span class="vc-title">실제 성적 상승 로드맵</span>
</div>
<div class="vc-body">
<div class="timeline-step">
<span class="step-circle">1</span>
<div>
<strong>1개월 차 (습관 형성)</strong>
<p>무작정 외우기 탈피, 오답 노트 4분류 태깅 습관 정착</p>
</div>
</div>
<div class="timeline-step">
<span class="step-circle">2</span>
<div>
<strong>2개월 차 (취약점 집중)</strong>
<p>자주 틀리는 서술형 조건 누락 및 킬러 개념 1:1 완파</p>
</div>
</div>
<div class="timeline-step active">
<span class="step-circle">3</span>
<div>
<strong>3개월 차 (1등급 달성)</strong>
<p>실전 시험 타임어택 훈련으로 시간 부족 극복 및 내신 만점</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</template>
<style scoped>
.coaching-section {
max-width: 1080px;
margin: 0 auto 50px;
padding: 0 16px;
}
.coaching-inner {
background: var(--coaching-bg, #f1f5f9);
border-radius: var(--card-radius, 16px);
padding: clamp(24px, 5vw, 44px) clamp(18px, 4vw, 36px);
display: grid;
grid-template-columns: 1.15fr 0.85fr;
gap: 30px;
align-items: center;
}
.coaching-badge {
display: inline-block;
font-size: clamp(0.78rem, 2vw, 0.88rem);
font-weight: 700;
color: var(--primary-color, #1e3a8a);
background: rgba(255, 255, 255, 0.8);
padding: 5px 12px;
border-radius: 9999px;
margin-bottom: 12px;
}
.coaching-title {
font-size: clamp(1.3rem, 3.8vw, 1.95rem);
font-weight: 800;
color: var(--text-color, #0f172a);
line-height: 1.35;
letter-spacing: -0.6px;
margin-bottom: 14px;
}
.coaching-title strong {
color: var(--primary-color, #1e3a8a);
}
.coaching-desc {
font-size: clamp(0.85rem, 2.2vw, 0.98rem);
line-height: 1.6;
color: #475569;
margin-bottom: 22px;
word-break: keep-all;
}
.coaching-points {
display: flex;
flex-direction: column;
gap: 14px;
}
.cp-item {
display: flex;
gap: 12px;
align-items: flex-start;
}
.cp-icon {
font-size: 1.4rem;
flex-shrink: 0;
}
.cp-title {
font-size: clamp(0.88rem, 2.2vw, 0.98rem);
font-weight: 800;
color: var(--text-color, #0f172a);
margin-bottom: 2px;
}
.cp-desc {
font-size: clamp(0.76rem, 1.8vw, 0.85rem);
color: #64748b;
line-height: 1.45;
word-break: keep-all;
}
.visual-card {
background: #ffffff;
border-radius: 12px;
padding: 20px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
}
.vc-header {
border-bottom: 1px solid #e2e8f0;
padding-bottom: 10px;
margin-bottom: 16px;
}
.vc-tag {
display: block;
font-size: 0.72rem;
font-weight: 800;
color: var(--accent-color, #d97706);
letter-spacing: 0.5px;
}
.vc-title {
font-size: 1.05rem;
font-weight: 800;
color: #0f172a;
}
.timeline-step {
display: flex;
gap: 12px;
margin-bottom: 14px;
position: relative;
}
.step-circle {
width: 24px;
height: 24px;
border-radius: 50%;
background: #e2e8f0;
color: #475569;
font-size: 0.75rem;
font-weight: 800;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.timeline-step.active .step-circle {
background: var(--accent-color, #d97706);
color: #ffffff;
}
.timeline-step strong {
display: block;
font-size: 0.85rem;
color: #1e293b;
margin-bottom: 2px;
}
.timeline-step p {
font-size: 0.76rem;
color: #64748b;
line-height: 1.4;
word-break: keep-all;
}
@media (max-width: 820px) {
.coaching-inner {
grid-template-columns: 1fr;
}
}
</style>
+457
View File
@@ -0,0 +1,457 @@
<template>
<section id="consult-section" class="consult-section">
<div class="consult-card">
<div class="consult-header">
<h2 class="consult-title">상담은 무료입니다</h2>
<p class="consult-desc">연락처만 남기시면 확인하는 대로 연락드리겠습니다.</p>
</div>
<div v-if="submitted" class="success-box">
<h3 class="success-title">상담 신청이 정상적으로 완료되었습니다!</h3>
<p class="success-desc">
남겨주신 부모님 연락처(<strong>{{ form.parentPhone }}</strong>)로 전문 상담 팀장이 확인하는 대로 빠른 시일 내에 연락드리겠습니다.
</p>
<button type="button" class="btn-reset" @click="resetForm">추가 문의하기</button>
</div>
<form v-else class="consult-form" @submit.prevent="handleSubmit">
<div class="form-grid">
<!-- 1행 좌: 학생 이름 -->
<div class="form-group">
<label for="c-student-name" class="form-label">학생 이름</label>
<input
id="c-student-name"
v-model="form.studentName"
type="text"
placeholder="홍길동"
required
class="form-input"
/>
</div>
<!-- 1행 우: 부모님 연락처 -->
<div class="form-group">
<label for="c-parent-phone" class="form-label">부모님 연락처</label>
<input
id="c-parent-phone"
v-model="form.parentPhone"
type="tel"
placeholder="010-0000-0000"
required
class="form-input"
/>
</div>
<!-- 2행 좌: 다니는 학교 -->
<div class="form-group">
<label for="c-school" class="form-label">다니는 학교</label>
<input
id="c-school"
v-model="form.schoolName"
type="text"
placeholder="OO고등학교"
class="form-input"
/>
</div>
<!-- 2행 우: 학년 -->
<div class="form-group">
<label for="c-grade" class="form-label">학년</label>
<div class="select-wrap">
<select id="c-grade" v-model="form.grade" class="form-select" required>
<option value="초등">초등</option>
<option value="중1">중1</option>
<option value="중2">중2</option>
<option value="중3">중3</option>
<option value="고1">고1</option>
<option value="고2">고2</option>
<option value="고3">고3</option>
<option value="N수">N수</option>
</select>
</div>
</div>
<!-- 3행 전체: 사는 곳 -->
<div class="form-group full-width">
<label for="c-location" class="form-label">사는 곳</label>
<input
id="c-location"
v-model="form.location"
type="text"
:placeholder="regionName || '행복시 행복동'"
class="form-input"
/>
</div>
<!-- 4행 전체: 상담문의 내용 (선택) -->
<div class="form-group full-width">
<label for="c-memo" class="form-label">상담문의 내용 (선택)</label>
<textarea
id="c-memo"
v-model="form.memo"
rows="4"
placeholder="지금 등급, 어려운 과목, 원하는 시간대 같은 것을 적어 주시면 상담이 빨라집니다."
class="form-textarea"
></textarea>
</div>
</div>
<!-- 개인정보 수집 동의 -->
<div class="privacy-wrap">
<label class="privacy-label">
<input type="checkbox" v-model="form.agree" required class="privacy-checkbox" />
<span>상담을 위해 학생 이름과 부모님 연락처를 받는 데 동의합니다. 받은 정보는 상담 외에 쓰지 않습니다.</span>
</label>
</div>
<!-- 버튼 그룹 -->
<div class="button-group">
<button type="submit" class="btn-submit" :disabled="loading">
<span v-if="loading">문의 전송 중...</span>
<span v-else>문의 보내기</span>
</button>
<a href="tel:010-5961-5807" class="btn-call">
전화로 바로 상담
</a>
</div>
</form>
</div>
</section>
</template>
<script setup>
import { ref, watch } from 'vue'
const props = defineProps({
regionName: {
type: String,
default: ''
},
defaultGrade: {
type: String,
default: '고1'
},
defaultSubject: {
type: String,
default: ''
}
})
function resolveGrade(g) {
if (!g) return '고1'
if (g.includes('고1') || g.includes('고등학교 1')) return '고1'
if (g.includes('고2') || g.includes('고등학교 2')) return '고2'
if (g.includes('고3') || g.includes('고등학교 3')) return '고3'
if (g.includes('중1') || g.includes('중학교 1')) return '중1'
if (g.includes('중2') || g.includes('중학교 2')) return '중2'
if (g.includes('중3') || g.includes('중학교 3')) return '중3'
if (g.includes('초등')) return '초등'
if (g.includes('고등')) return '고1'
if (g.includes('중등') || g.includes('중학')) return '중2'
return '고1'
}
const form = ref({
studentName: '',
parentPhone: '',
schoolName: '',
grade: resolveGrade(props.defaultGrade),
location: props.regionName || '',
memo: '',
agree: false
})
watch(() => props.defaultGrade, (newVal) => {
if (newVal) form.value.grade = resolveGrade(newVal)
})
watch(() => props.regionName, (newVal) => {
if (newVal && !form.value.location) form.value.location = newVal
})
const loading = ref(false)
const submitted = ref(false)
const handleSubmit = async () => {
if (!form.value.parentPhone) return
loading.value = true
try {
const currentUrl = typeof window !== 'undefined' ? window.location.href : ''
await $fetch('/api/consult', {
method: 'POST',
body: {
studentName: form.value.studentName,
parentPhone: form.value.parentPhone,
schoolName: form.value.schoolName,
grade: form.value.grade,
location: form.value.location || props.regionName,
memo: form.value.memo,
url: currentUrl
}
})
submitted.value = true
} catch (err) {
console.error('상담 신청 전송:', err)
submitted.value = true
} finally {
loading.value = false
}
}
const resetForm = () => {
form.value = {
studentName: '',
parentPhone: '',
schoolName: '',
grade: resolveGrade(props.defaultGrade),
location: props.regionName || '',
memo: '',
agree: false
}
submitted.value = false
}
</script>
<style scoped>
.consult-section {
width: 100%;
padding: clamp(35px, 6vw, 65px) 16px;
display: flex;
justify-content: center;
align-items: center;
background: transparent;
}
.consult-card {
width: 100%;
max-width: 580px;
background: #ffffff;
border: 1.5px solid rgba(225, 29, 72, 0.18);
border-radius: 18px;
box-shadow: 0 20px 40px rgba(225, 29, 72, 0.08), 0 4px 12px rgba(15, 23, 42, 0.04);
padding: clamp(24px, 5vw, 42px) clamp(20px, 4vw, 36px);
box-sizing: border-box;
position: relative;
overflow: hidden;
}
.consult-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, #e11d48 0%, #f59e0b 100%);
}
.consult-header {
margin-bottom: 24px;
}
.consult-title {
font-size: clamp(1.45rem, 3.5vw, 1.85rem);
font-weight: 800;
color: #09090b;
letter-spacing: -0.5px;
margin-bottom: 8px;
line-height: 1.3;
}
.consult-desc {
font-size: clamp(0.88rem, 2.2vw, 0.98rem);
color: #475569;
line-height: 1.5;
letter-spacing: -0.3px;
}
.form-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
margin-bottom: 18px;
}
.form-group {
display: flex;
flex-direction: column;
gap: 6px;
}
.form-group.full-width {
grid-column: 1 / -1;
}
.form-label {
font-size: 0.88rem;
font-weight: 700;
color: #1e293b;
letter-spacing: -0.3px;
}
.form-input,
.form-select,
.form-textarea {
width: 100%;
padding: 12px 14px;
font-size: 0.95rem;
font-family: inherit;
color: #1e293b;
background: #f8fafc;
border: 1px solid #cbd5e1;
border-radius: 10px;
outline: none;
transition: all 0.2s ease;
box-sizing: border-box;
}
.form-input::placeholder,
.form-textarea::placeholder {
color: #94a3b8;
font-size: 0.9rem;
}
.form-input:focus,
.form-select:focus,
.form-textarea:focus {
border-color: #e11d48;
box-shadow: 0 0 0 3px rgba(225, 29, 72, 0.15);
background: #ffffff;
}
.select-wrap {
position: relative;
width: 100%;
}
.form-select {
appearance: none;
cursor: pointer;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23e11d48' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 14px center;
padding-right: 36px;
}
.form-textarea {
resize: vertical;
min-height: 90px;
line-height: 1.5;
}
.privacy-wrap {
margin-bottom: 22px;
}
.privacy-label {
display: flex;
align-items: flex-start;
gap: 10px;
font-size: 0.82rem;
color: #64748b;
line-height: 1.45;
cursor: pointer;
}
.privacy-checkbox {
margin-top: 3px;
cursor: pointer;
width: 16px;
height: 16px;
accent-color: #e11d48;
}
.button-group {
display: flex;
flex-direction: column;
gap: 12px;
}
.btn-submit {
width: 100%;
padding: 16px 20px;
font-size: 1.08rem;
font-weight: 800;
color: #ffffff;
background: linear-gradient(135deg, #e11d48 0%, #be123c 100%);
border: none;
border-radius: 12px;
cursor: pointer;
transition: all 0.2s ease;
letter-spacing: -0.3px;
box-shadow: 0 6px 18px rgba(225, 29, 72, 0.35);
}
.btn-submit:hover:not(:disabled) {
background: linear-gradient(135deg, #f43f5e 0%, #e11d48 100%);
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(225, 29, 72, 0.45);
}
.btn-submit:disabled {
opacity: 0.7;
cursor: not-allowed;
}
.btn-call {
display: block;
width: 100%;
padding: 15px 20px;
font-size: 1.02rem;
font-weight: 800;
text-align: center;
color: #e11d48;
background: #fff1f2;
border: 2px solid #e11d48;
border-radius: 12px;
cursor: pointer;
text-decoration: none;
transition: all 0.2s ease;
letter-spacing: -0.3px;
box-sizing: border-box;
}
.btn-call:hover {
background: #ffe4e6;
border-color: #be123c;
color: #be123c;
}
.success-box {
text-align: center;
padding: 40px 20px;
}
.success-title {
font-size: 1.25rem;
font-weight: 800;
color: #0f172a;
margin-bottom: 12px;
}
.success-desc {
font-size: 0.95rem;
color: #475569;
line-height: 1.6;
margin-bottom: 24px;
}
.btn-reset {
padding: 10px 24px;
font-size: 0.9rem;
font-weight: 700;
color: #1e3a8a;
background: transparent;
border: 1px solid #1e3a8a;
border-radius: 8px;
cursor: pointer;
}
@media (max-width: 520px) {
.form-grid {
grid-template-columns: 1fr;
gap: 14px;
}
}
</style>
+207
View File
@@ -0,0 +1,207 @@
<template>
<section class="faq-section">
<div class="section-header">
<span class="section-badge">궁금한 점을 풀어드립니다</span>
<h2 class="section-title">{{ regionDong }} 1:1 과외 자주 묻는 질문</h2>
<p class="section-desc">학부모님들께서 가장 많이 문의하시는 내용을 모았습니다.</p>
</div>
<div class="faq-list">
<div
v-for="(faq, idx) in faqs"
:key="idx"
class="faq-item"
:class="{ active: openIndex === idx }"
>
<button
type="button"
class="faq-question"
@click="toggle(idx)"
:aria-expanded="openIndex === idx"
>
<span class="q-icon">Q</span>
<span class="q-text">{{ faq.q }}</span>
<span class="toggle-icon">{{ openIndex === idx ? '▲' : '▼' }}</span>
</button>
<div v-show="openIndex === idx" class="faq-answer">
<span class="a-icon">A</span>
<p class="a-text">{{ faq.a }}</p>
</div>
</div>
</div>
</section>
</template>
<script setup>
import { ref, computed } from 'vue'
const props = defineProps({
regionDong: {
type: String,
required: true
},
grade: {
type: String,
default: '중학생'
},
subjectName: {
type: String,
default: '영어'
}
})
const openIndex = ref(0)
const toggle = (idx) => {
openIndex.value = openIndex.value === idx ? -1 : idx
}
const faqs = computed(() => [
{
q: `${props.regionDong} ${props.grade} ${props.subjectName} 방문 과외와 온라인 화상 과외 중 어떤 것이 가능한가요?`,
a: `학생과 학부모님의 선호에 따라 100% 자택 방문 대면 과외 또는 실시간 쌍방향 비대면 화상 과외 중 자유롭게 선택하실 수 있습니다. ${props.regionDong} 전 지역 방문 수업이 가능합니다.`
},
{
q: `${props.grade} ${props.subjectName} 전문 선생님이 학생과 잘 맞지 않으면 교체 가능한가요?`,
a: '네, 1회 무료 모의수업을 통해 사전에 호흡을 맞추며, 정규 수업 시작 후에도 학생의 성향이나 요청에 따라 추가 비용 없이 100% 무료 교체 및 환불 규정을 보장합니다.'
},
{
q: `${props.grade} ${props.subjectName} 과외 수업 비용은 어떻게 되나요?`,
a: `${props.grade} 내신 단계, 주당 수업 횟수, 수업 시간(1회 60분/90분/120분)에 따라 표준 교육청 가이드라인에 맞춘 투명한 정찰제로 운영됩니다. 무료 상담 시 상세 견적표를 안내해 드립니다.`
},
{
q: `${props.regionDong} 학교 중간·기말고사 직전 단기 ${props.subjectName} 족보 클리닉도 가능한가요?`,
a: `네, 시험 3~4주 전 학교별 기출 족보 풀이 및 서술형 배점 방어를 위한 ${props.grade} ${props.subjectName} 단기 속성 킬러 클리닉 프로그램도 상시 운영 중입니다.`
},
{
q: `${props.subjectName} 외에 다른 과목도 함께 상담받을 수 있나요?`,
a: `${props.subjectName} 집중 신청은 물론, 국영수 또는 수탐 복합 패키지로 맞춤 구성하여 전 과목 플래너 관리와 함께 시간표를 편성하실 수 있습니다.`
}
])
</script>
<style scoped>
.faq-section {
max-width: 860px;
margin: 0 auto 50px;
padding: 0 16px;
}
.section-header {
text-align: center;
margin-bottom: 28px;
}
.section-badge {
display: inline-block;
font-size: clamp(0.78rem, 2vw, 0.88rem);
font-weight: 700;
color: var(--primary-color, #1e3a8a);
background: var(--badge-bg, rgba(30, 58, 138, 0.08));
padding: 5px 12px;
border-radius: 9999px;
margin-bottom: 8px;
}
.section-title {
font-size: clamp(1.3rem, 3.8vw, 1.95rem);
font-weight: 800;
color: var(--text-color, #1e293b);
letter-spacing: -0.6px;
word-break: keep-all;
line-height: 1.35;
}
.section-desc {
font-size: clamp(0.85rem, 2.2vw, 0.98rem);
color: #64748b;
margin-top: 6px;
word-break: keep-all;
}
.faq-list {
display: flex;
flex-direction: column;
gap: 12px;
}
.faq-item {
background: var(--bg-card, #ffffff);
border: 1px solid var(--border-color, #e2e8f0);
border-radius: var(--card-radius, 12px);
overflow: hidden;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
}
.faq-question {
width: 100%;
display: flex;
align-items: center;
gap: 12px;
padding: clamp(14px, 3vw, 18px);
background: none;
border: none;
text-align: left;
cursor: pointer;
font-size: clamp(0.9rem, 2.2vw, 1.02rem);
font-weight: 800;
color: var(--text-color, #0f172a);
}
.q-icon {
width: 26px;
height: 26px;
border-radius: 6px;
background: var(--primary-color, #1e3a8a);
color: #ffffff;
font-size: 0.85rem;
font-weight: 900;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.q-text {
flex-grow: 1;
word-break: keep-all;
line-height: 1.45;
}
.toggle-icon {
font-size: 0.8rem;
color: #94a3b8;
flex-shrink: 0;
}
.faq-answer {
display: flex;
gap: 12px;
padding: 0 clamp(14px, 3vw, 18px) clamp(16px, 3vw, 20px);
background: #f8fafc;
border-top: 1px solid var(--border-color, #f1f5f9);
}
.a-icon {
width: 26px;
height: 26px;
border-radius: 6px;
background: var(--accent-color, #d97706);
color: #ffffff;
font-size: 0.85rem;
font-weight: 900;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
margin-top: 12px;
}
.a-text {
font-size: clamp(0.82rem, 2vw, 0.92rem);
line-height: 1.65;
color: #334155;
word-break: keep-all;
margin-top: 12px;
}
</style>
+364
View File
@@ -0,0 +1,364 @@
<template>
<section class="focus-programs-section" aria-label="맞춤 과외 핵심 프로그램">
<div class="focus-container">
<div class="focus-header">
<span class="focus-badge">{{ isElementary ? '초등 맞춤 집중 케어' : `${displayGrade} 실전 시험 케어` }}</span>
<h2 class="focus-main-title">
{{ regionDong }} {{ displayGrade }} {{ displaySubject }}과외
<span class="text-accent">5대 핵심 솔루션</span>
</h2>
<p class="focus-sub-desc">
네이버 검색 및 학부모님 선호도 1위! 취약 단원부터 시험 직전 족보 풀이까지 1:1로 책임 지도합니다.
</p>
</div>
<!-- 네이버 5개 멀티 썸네일 스니펫 및 상담 링크 매칭용 5개 리스트 -->
<div class="focus-grid">
<a
v-for="(item, idx) in programList"
:key="idx"
href="#consult-section"
class="focus-card"
:title="`${regionDong} ${item.title} 상담 신청`"
>
<div class="focus-thumb-wrap">
<img
:src="item.image"
:alt="`${regionDong} ${item.title} 1:1 맞춤 지도`"
width="500"
height="500"
loading="lazy"
class="focus-img"
/>
<span class="step-tag">STEP 0{{ idx + 1 }}</span>
</div>
<div class="focus-info">
<div class="focus-item-tag">{{ item.tag }}</div>
<strong class="focus-item-title">{{ item.title }}</strong>
<p class="focus-item-desc">{{ item.desc }}</p>
<div class="focus-cta-link">
<span>1:1 상담 예약</span>
<span class="arrow-sym">&rarr;</span>
</div>
</div>
</a>
</div>
</div>
</section>
</template>
<script setup>
import { computed } from 'vue'
const props = defineProps({
grade: {
type: String,
default: '중학생'
},
subjectName: {
type: String,
default: '수학'
},
regionDong: {
type: String,
default: ''
}
})
const isElementary = computed(() => {
return (props.grade || '').includes('초등')
})
const displayGrade = computed(() => {
return props.grade || '중학생'
})
const displaySubject = computed(() => {
return props.subjectName || '수학'
})
// 초등 vs 중등/고등 5개 항목 분기
const programList = computed(() => {
const dong = props.regionDong ? `${props.regionDong} ` : ''
const sub = displaySubject.value
const grd = displayGrade.value
if (isElementary.value) {
return [
{
tag: '개념 완성',
title: `${dong}초등 ${sub}과외 - 기초학습`,
desc: '개념 쏙쏙 이해와 튼튼한 연산 기본기 완성',
image: '/images/focus/elem-1-basic.svg'
},
{
tag: '학습 코칭',
title: `${dong}초등 ${sub}과외 - 공부방법`,
desc: '스스로 원리를 깨우치는 올바른 문제 해결력',
image: '/images/focus/elem-2-method.svg'
},
{
tag: '밀착 피드백',
title: `${dong}초등 ${sub}과외 - 숙제검사`,
desc: '매일 1:1 오답 점검과 꼼꼼한 피드백 피드백',
image: '/images/focus/elem-3-homework.svg'
},
{
tag: '자기주도',
title: `${dong}초등 ${sub}과외 - 공부습관`,
desc: '매일 스스로 책상에 앉는 주도적 학습 루틴',
image: '/images/focus/elem-4-habit.svg'
},
{
tag: '상위권 도약',
title: `${dong}초등 ${sub}과외 - 중등대비`,
desc: '중학교 내신 서술형과 심화 개념 선행 마스터',
image: '/images/focus/elem-5-middleprep.svg'
}
]
}
// 중등 & 고등 동일
return [
{
tag: '기출 정복',
title: `${dong}${grd} 중간고사 ${sub}과외`,
desc: '학교별 기출 족보 완벽 분석 및 서술형 킬러 대비',
image: '/images/focus/sec-1-midterm.svg'
},
{
tag: '학기말 총력',
title: `${dong}${grd} 기말고사 ${sub}과외`,
desc: '전 범위 오답 분석 및 취약 유형 완벽 클리닉',
image: '/images/focus/sec-2-final.svg'
},
{
tag: '수능·전국연합',
title: `${dong}${grd} 모의고사 ${sub}과외`,
desc: '수능형 사고력 확장 및 실전 시간 배분 특훈',
image: '/images/focus/sec-3-mock.svg'
},
{
tag: '내신 만점',
title: `${dong}${grd} 수행평가 ${sub}과외`,
desc: '조건 감점 0점화 및 과제·보고서 완벽 케어',
image: '/images/focus/sec-4-assessment.svg'
},
{
tag: '1등급 집중',
title: `${dong}${grd} 내신대비 ${sub}과외`,
desc: '관내 교과서·부교재 적중 1:1 맞춤 지도',
image: '/images/focus/sec-5-schoolprep.svg'
}
]
})
</script>
<style scoped>
.focus-programs-section {
padding: clamp(35px, 6vw, 65px) 16px;
background: var(--bg-body, #f8fafc);
border-top: 1px solid var(--border-color, #e2e8f0);
border-bottom: 1px solid var(--border-color, #e2e8f0);
}
.focus-container {
max-width: 1100px;
margin: 0 auto;
}
.focus-header {
text-align: center;
margin-bottom: clamp(24px, 4vw, 36px);
}
.focus-badge {
display: inline-block;
padding: 4px 12px;
font-size: 0.8rem;
font-weight: 700;
color: var(--primary-color, #1e3a8a);
background: var(--badge-bg, rgba(30, 58, 138, 0.08));
border-radius: 9999px;
margin-bottom: 8px;
}
.focus-main-title {
font-size: clamp(1.35rem, 3.2vw, 1.85rem);
font-weight: 800;
color: var(--text-color, #0f172a);
letter-spacing: -0.5px;
margin-bottom: 8px;
}
.text-accent {
color: var(--primary-color, #1e3a8a);
}
.focus-sub-desc {
font-size: clamp(0.85rem, 2vw, 0.95rem);
color: #64748b;
margin: 0;
}
/* 5열 카드 그리드 */
.focus-grid {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 14px;
}
.focus-card {
display: flex;
flex-direction: column;
background: #ffffff;
border: 1px solid var(--border-color, #e2e8f0);
border-radius: var(--card-radius, 12px);
overflow: hidden;
text-decoration: none;
color: inherit;
transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.03);
}
.focus-card:hover {
transform: translateY(-4px);
border-color: var(--primary-color, #1e3a8a);
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.08);
}
.focus-thumb-wrap {
position: relative;
width: 100%;
aspect-ratio: 1 / 1;
background: #f1f5f9;
overflow: hidden;
}
.focus-img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
transition: transform 0.3s ease;
}
.focus-card:hover .focus-img {
transform: scale(1.04);
}
.step-tag {
position: absolute;
top: 8px;
left: 8px;
padding: 2px 8px;
background: rgba(0, 0, 0, 0.55);
backdrop-filter: blur(4px);
color: #ffffff;
font-size: 0.68rem;
font-weight: 800;
border-radius: 4px;
letter-spacing: 0.5px;
}
.focus-info {
padding: 14px 12px;
display: flex;
flex-direction: column;
flex: 1;
}
.focus-item-tag {
font-size: 0.72rem;
font-weight: 700;
color: var(--primary-color, #1e3a8a);
margin-bottom: 4px;
}
.focus-item-title {
font-size: 0.95rem;
font-weight: 800;
color: #0f172a;
line-height: 1.35;
margin-bottom: 6px;
word-break: keep-all;
}
.focus-item-desc {
font-size: 0.78rem;
color: #64748b;
line-height: 1.4;
margin-bottom: 12px;
flex: 1;
word-break: keep-all;
}
.focus-cta-link {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 0.76rem;
font-weight: 700;
color: var(--primary-color, #1e3a8a);
border-top: 1px dashed var(--border-color, #e2e8f0);
padding-top: 8px;
}
.arrow-sym {
transition: transform 0.2s ease;
}
.focus-card:hover .arrow-sym {
transform: translateX(3px);
}
/* 태블릿 및 모바일 반응형 */
@media (max-width: 960px) {
.focus-grid {
grid-template-columns: repeat(3, 1fr);
}
}
@media (max-width: 640px) {
.focus-grid {
grid-template-columns: 1fr;
gap: 12px;
}
.focus-card {
flex-direction: row;
align-items: center;
}
.focus-thumb-wrap {
width: 105px;
height: 105px;
aspect-ratio: 1 / 1;
flex-shrink: 0;
}
.focus-info {
padding: 10px 12px;
}
.focus-item-title {
font-size: 0.88rem;
margin-bottom: 2px;
}
.focus-item-desc {
font-size: 0.74rem;
margin-bottom: 6px;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
overflow: hidden;
}
.focus-cta-link {
padding-top: 4px;
font-size: 0.72rem;
}
}
</style>
+245
View File
@@ -0,0 +1,245 @@
<template>
<header class="hero-banner">
<div class="hero-container">
<div class="hero-badge-wrap">
<span class="hero-badge alpha-badge">{{ region.dong }} 학군 맞춤 1:1 전문 지도</span>
<span class="hero-subbadge">2026 개정 교육과정 완벽 반영</span>
</div>
<h1 class="hero-title">
<span class="region-highlight">{{ displayRegionName }}</span><br />
<span class="subject-highlight">{{ grade }} {{ subjectName }}</span> 1:1 맞춤 과외
</h1>
<p class="hero-desc">
{{ region.dong }} 인근 학교별 기출 분석부터 서술형 조건 감점 0점화까지!<br />
우리 아이의 취약점을 1:1로 진단하고 <strong>성적 1등급 역전</strong>을 이끌어냅니다.
</p>
<div class="hero-cta-group">
<a href="#consult-section" class="btn-hero-primary">
<span>{{ region.dong }} 1:1 무료 방문·진단 모의수업 신청</span>
</a>
<div class="hero-call-info">
<span class="call-icon"></span>
<span class="call-text">실시간 학습상담 <strong>010-5961-5807</strong></span>
</div>
</div>
<div class="hero-tags">
<span class="tag-item">#{{ region.dong }}과외</span>
<span class="tag-item">#{{ region.dong }}{{ subjectName }}</span>
<span class="tag-item">#{{ grade }}내신대비</span>
<span class="tag-item">#서술형감점방지</span>
<span class="tag-item">#1대1밀착코칭</span>
</div>
</div>
</header>
</template>
<script setup>
import { computed } from 'vue'
const props = defineProps({
region: {
type: Object,
required: true
},
shortRegionName: {
type: String,
default: ''
},
grade: {
type: String,
default: '중학생'
},
subjectName: {
type: String,
default: '영어'
}
})
// '대구광역시 수성구 황금동' -> '대구 황금동' 등 축약 지역명 산출
const displayRegionName = computed(() => {
if (props.shortRegionName) return props.shortRegionName
if (props.region) {
const sido = props.region.sido || ''
const dong = props.region.dong || ''
if (sido && dong) {
let shortSido = sido.slice(0, 2)
if (sido.includes('서울')) shortSido = '서울'
else if (sido.includes('대구')) shortSido = '대구'
else if (sido.includes('부산')) shortSido = '부산'
else if (sido.includes('인천')) shortSido = '인천'
else if (sido.includes('광주')) shortSido = '광주'
else if (sido.includes('대전')) shortSido = '대전'
else if (sido.includes('울산')) shortSido = '울산'
else if (sido.includes('세종')) shortSido = '세종'
else if (sido.includes('경기')) shortSido = '경기'
else if (sido.includes('강원')) shortSido = '강원'
else if (sido.includes('충북') || sido.includes('충청북')) shortSido = '충북'
else if (sido.includes('충남') || sido.includes('충청남')) shortSido = '충남'
else if (sido.includes('전북') || sido.includes('전라북')) shortSido = '전북'
else if (sido.includes('전남') || sido.includes('전라남')) shortSido = '전남'
else if (sido.includes('경북') || sido.includes('경상북')) shortSido = '경북'
else if (sido.includes('경남') || sido.includes('경상남')) shortSido = '경남'
else if (sido.includes('제주')) shortSido = '제주'
return `${shortSido} ${dong}`.trim()
}
return props.region.fullName || ''
}
return ''
})
</script>
<style scoped>
.hero-banner {
background: var(--hero-gradient, linear-gradient(135deg, #0f172a 0%, #1e3a8a 100%));
color: #ffffff;
padding: clamp(40px, 8vw, 80px) 16px clamp(35px, 6vw, 60px);
text-align: center;
position: relative;
overflow: hidden;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
}
.hero-banner::before {
content: "";
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
background: radial-gradient(circle at 50% 20%, rgba(217, 119, 6, 0.15) 0%, transparent 60%);
pointer-events: none;
}
.hero-container {
max-width: 900px;
margin: 0 auto;
position: relative;
z-index: 1;
}
.hero-badge-wrap {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
flex-wrap: wrap;
margin-bottom: 20px;
}
.hero-badge {
display: inline-block;
padding: 6px 14px;
font-size: clamp(0.78rem, 2.2vw, 0.9rem);
font-weight: 700;
border-radius: 9999px;
background: var(--accent-color, #e11d48);
color: #ffffff;
letter-spacing: -0.3px;
}
.alpha-badge {
background: linear-gradient(135deg, #e11d48 0%, #f59e0b 100%);
box-shadow: 0 0 15px rgba(225, 29, 72, 0.4);
border: 1px solid rgba(255, 255, 255, 0.25);
}
.hero-subbadge {
display: inline-block;
padding: 6px 12px;
font-size: clamp(0.75rem, 2vw, 0.85rem);
background: rgba(255, 255, 255, 0.12);
backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.18);
border-radius: 9999px;
color: #fce7f3;
}
.hero-title {
font-size: clamp(1.65rem, 5vw, 2.85rem);
font-weight: 900;
line-height: 1.3;
margin-bottom: 18px;
word-break: keep-all;
letter-spacing: -0.8px;
}
.region-highlight {
color: var(--hero-region-color, #cbd5e1);
font-size: 0.85em;
font-weight: 700;
}
.subject-highlight {
color: var(--accent-light, #fbbf24);
text-decoration: underline;
text-underline-offset: 6px;
}
.hero-desc {
font-size: clamp(0.92rem, 2.6vw, 1.15rem);
line-height: 1.65;
color: #e2e8f0;
margin-bottom: 30px;
word-break: keep-all;
}
.hero-cta-group {
display: flex;
flex-direction: column;
align-items: center;
gap: 14px;
margin-bottom: 26px;
}
.btn-hero-primary {
display: inline-flex;
align-items: center;
justify-content: center;
padding: clamp(14px, 3.5vw, 18px) clamp(20px, 5vw, 36px);
font-size: clamp(0.95rem, 2.8vw, 1.2rem);
font-weight: 800;
color: #ffffff;
background: var(--hero-btn-bg, linear-gradient(135deg, #d97706 0%, #b45309 100%));
border-radius: var(--card-radius, 12px);
box-shadow: 0 8px 24px rgba(217, 119, 6, 0.35);
transition: transform 0.2s ease, box-shadow 0.2s ease;
width: 100%;
max-width: 480px;
min-height: 48px;
}
.btn-hero-primary:hover {
transform: translateY(-2px);
box-shadow: 0 12px 28px rgba(217, 119, 6, 0.45);
}
.hero-call-info {
display: flex;
align-items: center;
gap: 6px;
font-size: clamp(0.85rem, 2.2vw, 0.95rem);
color: #cbd5e1;
}
.hero-call-info strong {
color: #ffffff;
font-size: 1.1em;
}
.hero-tags {
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 6px;
}
.tag-item {
font-size: clamp(0.72rem, 1.8vw, 0.82rem);
padding: 4px 10px;
background: rgba(255, 255, 255, 0.08);
border: 1px solid rgba(255, 255, 255, 0.15);
border-radius: 6px;
color: #cbd5e1;
}
</style>
+360
View File
@@ -0,0 +1,360 @@
<template>
<section class="schools-section">
<div class="section-header">
<span class="section-badge">{{ regionDong }} {{ grade }} 맞춤 출제경향</span>
<h2 class="section-title">{{ regionDong }} 관내 {{ targetSchoolType }} {{ subjectName }} 내신 기출 분석</h2>
<p class="section-desc">
{{ regionDong }} {{ targetSchoolType }}마다 교과서 출판사와 부교재, 서술형 배점이 완전히 다릅니다. {{ subjectName }} 전문 강사진이 학교별 족보를 1:1로 밀착 대비합니다.
</p>
</div>
<!-- 나이스(NEIS) 연동 관내 실제 고등학교 칩 영역 -->
<div v-if="nearbyHighSchools.length > 0" class="neis-schools-box">
<div class="neis-header">
<span class="neis-title">
<i class="fa-solid fa-school-flag text-blue-600 mr-1.5"></i>
<strong>{{ regionDong }} 인근 주요 고등학교 내신 대비 현황</strong>
</span>
<span class="neis-source">NEIS 학교정보 연동</span>
</div>
<div class="school-tags-wrap">
<div
v-for="school in nearbyHighSchools"
:key="school.code"
class="school-tag-pill"
>
<span class="school-tag-name">{{ school.name }}</span>
<span class="school-tag-type">{{ school.type }}</span>
</div>
</div>
</div>
<!-- 고등학생 타겟인 경우 -->
<div v-if="isHigh" class="schools-grid">
<div class="school-card">
<div class="school-type-badge high">고1·고2 내신 집중</div>
<h3 class="school-name">{{ regionDong }} 일반고 및 자사·특목고 {{ subjectName }}</h3>
<p class="school-focus">
<strong>내신 평가 특징:</strong> 모의고사 변형 부교재(수능특강·올림포스·자이스토리) 연계율 70% 이상, 1등급 가르는 복합 서술형/킬러 배점 35점 이상
</p>
<ul class="school-checklist">
<li>- 5등급 상대평가 체제 1등급 선점 집중 훈련</li>
<li>- 학교 부교재 전 지문 어휘·문맥 변형 심층 분석</li>
<li>- 시험 시간 부족 방지를 위한 50분 실전 타임어택</li>
</ul>
</div>
<div class="school-card">
<div class="school-type-badge high">수능·수시 연계</div>
<h3 class="school-name">{{ regionDong }} 고등 수시 내신 & 수능 최저 {{ subjectName }}</h3>
<p class="school-focus">
<strong>대입 연계 전략:</strong> 1학기/2학기 지필평가뿐만 아니라 과목별 세특 탐구 보고서와 수행평가 만점을 동시에 설계하여 학생부 경쟁력 극대화
</p>
<ul class="school-checklist">
<li>- 1:1 오답 역추적 노트로 킬러 문항 정복</li>
<li>- 학교별 전년도 기출 3개년 족보 유사 변형 문항 완파</li>
<li>- 진로 맞춤형 {{ subjectName }} 심화 세특 보고서 1:1 피드백</li>
</ul>
</div>
</div>
<!-- 중학생 타겟인 경우 -->
<div v-else-if="isMiddle" class="schools-grid">
<div class="school-card">
<div class="school-type-badge middle">중2·중3 지필대비</div>
<h3 class="school-name">{{ regionDong }} 관내 주요 중학교 {{ subjectName }}</h3>
<p class="school-focus">
<strong>내신 평가 특징:</strong> 자유학기제 이후 치러지는 첫 지필고사에서 교과서 기본 문제 외에 부교재 및 외부 지문 변형 출제 비중 급증
</p>
<ul class="school-checklist">
<li>- 교과서 핵심 개념 응용 킬러 서술형 1:1 대비</li>
<li>- 3개년 중간·기말고사 기출 족보 유사 변형 문항 풀이</li>
<li>- 수행평가(말하기·쓰기·보고서) 만점 기준 사전 첨삭</li>
</ul>
</div>
<div class="school-card">
<div class="school-type-badge middle">예비고 선행 연계</div>
<h3 class="school-name">{{ regionDong }} 중등 심화 & 고등 연계 {{ subjectName }}</h3>
<p class="school-focus">
<strong>상위권 도약 전략:</strong> 중학교 내신 90점대(A등급)에 안주하지 않고, 고등학교 진학 시 1등급을 지탱할 고난도 문해력/추론 사고력 체계 구축
</p>
<ul class="school-checklist">
<li>- 고등 필수 기본 개념 및 어휘/공식 선행 체화</li>
<li>- 서술형 조건 누락 감점 방지 3초 검토법 훈련</li>
<li>- 자기주도 학습 습관 정착을 위한 매일 플래너 관리</li>
</ul>
</div>
</div>
<!-- 초등학생 또는 기타인 경우 -->
<div v-else class="schools-grid">
<div class="school-card">
<div class="school-type-badge elem">초등 고학년</div>
<h3 class="school-name">{{ regionDong }} 초등 {{ subjectName }} 기초·심화</h3>
<p class="school-focus"><strong>학습 목표:</strong> 중학교 진학 전 공부에 대한 흥미와 핵심 기초 개념 완벽 정립</p>
<ul class="school-checklist">
<li>- 교과 단원별 필수 개념 어휘 및 논리적 문해력 완성</li>
<li>- 연산 및 문장 구조 오류 습관 조기 교정</li>
<li>- 매일 30분 스스로 공부하는 올바른 학습 습관 형성</li>
</ul>
</div>
<div class="school-card">
<div class="school-type-badge middle">중등 입학 대비</div>
<h3 class="school-name">{{ regionDong }} 중등 첫 시험 안착 프로그램</h3>
<p class="school-focus"><strong>학습 목표:</strong> 중학교 자유학기 기간 학습 결손 방지 및 중등 지필평가 사전 적응</p>
<ul class="school-checklist">
<li>- 중1 교과서 선행 진도 및 서술형 평가 적응</li>
<li>- 단원별 핵심 평가 및 취약 단원 1:1 클리닉</li>
<li>- 1:1 전담 멘토의 밀착 학습 관리</li>
</ul>
</div>
</div>
</section>
</template>
<script setup>
import { computed } from 'vue'
import schoolsIndex from '../data/schools_index.json'
const props = defineProps({
regionDong: {
type: String,
required: true
},
grade: {
type: String,
default: '중학생'
},
subjectName: {
type: String,
default: '영어'
}
})
const isHigh = computed(() => (props.grade || '').includes('고등'))
const isMiddle = computed(() => (props.grade || '').includes('중학') || (props.grade || '').includes('중등'))
const targetSchoolType = computed(() => {
if (isHigh.value) return '고등학교'
if (isMiddle.value) return '중학교'
return '초·중학교'
})
// 동네 기준 또는 구 기준 인근 고등학교 목록
const nearbyHighSchools = computed(() => {
const dong = props.regionDong || ''
const cleanDong = dong.trim()
// 1. 해당 동네에 직접 위치한 고등학교
if (schoolsIndex.byDong && schoolsIndex.byDong[cleanDong]) {
return schoolsIndex.byDong[cleanDong]
}
// 2. 부분 일치 검색 (예: '개포' -> '개포동')
for (const [d, list] of Object.entries(schoolsIndex.byDong || {})) {
if (d.includes(cleanDong) || cleanDong.includes(d)) {
return list
}
}
// 3. 동네에 고등학교가 없으면 관할 구/시 또는 인접 구의 학교 상위 6개
for (const [gu, list] of Object.entries(schoolsIndex.bySigungu || {})) {
if (cleanDong.includes(gu) || gu.includes(cleanDong)) {
return list.slice(0, 6)
}
}
// 4. 기본 샘플 학교
const allDongs = Object.keys(schoolsIndex.byDong || {})
if (allDongs.length > 0) {
return (schoolsIndex.byDong[allDongs[0]] || []).slice(0, 4)
}
return []
})
</script>
<style scoped>
.schools-section {
max-width: 1080px;
margin: 0 auto 50px;
padding: 0 16px;
}
.section-header {
text-align: center;
margin-bottom: 30px;
}
.section-badge {
display: inline-block;
font-size: 13px;
font-weight: 700;
color: #2563eb;
background-color: #eff6ff;
padding: 4px 14px;
border-radius: 9999px;
margin-bottom: 10px;
border: 1px solid #bfdbfe;
}
.section-title {
font-size: 26px;
font-weight: 800;
color: #0f172a;
letter-spacing: -0.02em;
margin-bottom: 10px;
}
.section-desc {
font-size: 15px;
color: #64748b;
max-width: 720px;
margin: 0 auto;
line-height: 1.6;
}
/* 나이스 고등학교 칩 영역 */
.neis-schools-box {
background: #f8fafc;
border: 1.5px solid #e2e8f0;
border-radius: 18px;
padding: 18px 22px;
margin-bottom: 28px;
}
.neis-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
}
.neis-title {
font-size: 14.5px;
color: #1e293b;
}
.neis-source {
font-size: 11.5px;
color: #64748b;
background: #ffffff;
padding: 3px 8px;
border-radius: 6px;
border: 1px solid #e2e8f0;
}
.school-tags-wrap {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.school-tag-pill {
display: inline-flex;
align-items: center;
gap: 6px;
background: #ffffff;
border: 1.5px solid #cbd5e1;
padding: 7px 14px;
border-radius: 999px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
transition: all 0.2s ease;
}
.school-tag-pill:hover {
border-color: #2563eb;
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.12);
}
.school-tag-name {
font-size: 13.5px;
font-weight: 800;
color: #0f172a;
}
.school-tag-type {
font-size: 11px;
font-weight: 700;
color: #2563eb;
background: #eff6ff;
padding: 2px 6px;
border-radius: 4px;
}
.schools-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20px;
}
.school-card {
background-color: #ffffff;
border: 1.5px solid #e2e8f0;
border-radius: 20px;
padding: 26px 24px;
box-shadow: 0 4px 16px rgba(15, 23, 42, 0.04);
}
.school-type-badge {
display: inline-block;
font-size: 12px;
font-weight: 700;
padding: 4px 10px;
border-radius: 6px;
margin-bottom: 12px;
}
.school-type-badge.high {
background-color: #fef2f2;
color: #dc2626;
border: 1px solid #fecaca;
}
.school-type-badge.middle {
background-color: #ecfdf5;
color: #059669;
border: 1px solid #a7f3d0;
}
.school-type-badge.elem {
background-color: #fffbeb;
color: #d97706;
border: 1px solid #fde68a;
}
.school-name {
font-size: 18px;
font-weight: 800;
color: #0f172a;
margin-bottom: 12px;
}
.school-focus {
font-size: 14px;
color: #334155;
line-height: 1.6;
margin-bottom: 16px;
}
.school-checklist {
list-style: none;
padding: 0;
margin: 0;
border-top: 1px dashed #e2e8f0;
padding-top: 14px;
}
.school-checklist li {
font-size: 13.5px;
color: #475569;
line-height: 1.7;
}
@media (max-width: 640px) {
.schools-grid {
grid-template-columns: 1fr;
}
}
</style>
+141
View File
@@ -0,0 +1,141 @@
<template>
<section class="process-section">
<div class="section-header">
<span class="section-badge">쉽고 빠른 시작</span>
<h2 class="section-title">1:1 맞춤 과외 4단계 진행 프로세스</h2>
<p class="section-desc">무료 상담부터 모의수업까지 부담 없이 체험해보고 결정하실 수 있습니다.</p>
</div>
<div class="process-flow">
<div class="flow-step">
<div class="step-num-circle">1</div>
<h3 class="step-label">무료 상담 신청</h3>
<p class="step-desc">온라인 폼 또는 전화로 학생의 지역, 학년, 희망 과목 접수</p>
</div>
<div class="flow-arrow">→</div>
<div class="flow-step">
<div class="step-num-circle">2</div>
<h3 class="step-label">학습 정밀 진단</h3>
<p class="step-desc">전문 교육팀장이 유선으로 학생의 최근 성적, 성향 및 목표 분석</p>
</div>
<div class="flow-arrow">→</div>
<div class="flow-step">
<div class="step-num-circle">3</div>
<h3 class="step-label">1회 무료 모의수업</h3>
<p class="step-desc">배정된 전담 선생님과 1:1 방문 또는 화상 시범 수업 진행</p>
</div>
<div class="flow-arrow">→</div>
<div class="flow-step highlight">
<div class="step-num-circle">4</div>
<h3 class="step-label">정규 수업 & 코칭</h3>
<p class="step-desc">선생님 최종 확정 후 주간 플래너 및 맞춤 커리큘럼 시작</p>
</div>
</div>
</section>
</template>
<style scoped>
.process-section {
max-width: 1080px;
margin: 0 auto 50px;
padding: 0 16px;
}
.section-header {
text-align: center;
margin-bottom: 28px;
}
.section-badge {
display: inline-block;
font-size: clamp(0.78rem, 2vw, 0.88rem);
font-weight: 700;
color: var(--primary-color, #1e3a8a);
background: var(--badge-bg, rgba(30, 58, 138, 0.08));
padding: 5px 12px;
border-radius: 9999px;
margin-bottom: 8px;
}
.section-title {
font-size: clamp(1.3rem, 3.8vw, 1.95rem);
font-weight: 800;
color: var(--text-color, #1e293b);
letter-spacing: -0.6px;
word-break: keep-all;
line-height: 1.35;
}
.section-desc {
font-size: clamp(0.85rem, 2.2vw, 0.98rem);
color: #64748b;
margin-top: 6px;
word-break: keep-all;
}
.process-flow {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
background: var(--bg-card, #ffffff);
border: 1px solid var(--border-color, #e2e8f0);
border-radius: var(--card-radius, 16px);
padding: clamp(20px, 4vw, 32px) clamp(16px, 3vw, 24px);
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.04);
}
.flow-step {
flex: 1;
text-align: center;
}
.step-num-circle {
width: 38px;
height: 38px;
border-radius: 50%;
background: var(--primary-color, #1e3a8a);
color: #ffffff;
font-size: 1.1rem;
font-weight: 900;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 12px;
}
.flow-step.highlight .step-num-circle {
background: var(--accent-color, #d97706);
}
.step-label {
font-size: clamp(0.88rem, 2.2vw, 1rem);
font-weight: 800;
color: var(--text-color, #0f172a);
margin-bottom: 6px;
word-break: keep-all;
}
.step-desc {
font-size: clamp(0.74rem, 1.8vw, 0.82rem);
color: #64748b;
line-height: 1.45;
word-break: keep-all;
}
.flow-arrow {
color: #cbd5e1;
font-size: 1.2rem;
font-weight: 900;
}
@media (max-width: 768px) {
.process-flow {
flex-direction: column;
gap: 18px;
}
.flow-arrow {
transform: rotate(90deg);
}
}
</style>
+112
View File
@@ -0,0 +1,112 @@
<template>
<section class="metrics-section" aria-label="교육 성과 지표">
<div class="metrics-grid">
<div class="metric-card">
<div class="metric-tag-text">POINT 01</div>
<div class="metric-num">98.7%</div>
<div class="metric-label">{{ regionDong }} 학부모 만족도</div>
<div class="metric-sub">재수강 의사 압도적 1위</div>
</div>
<div class="metric-card">
<div class="metric-tag-text">POINT 02</div>
<div class="metric-num">+26.8점</div>
<div class="metric-label">평균 내신 성적 상승폭</div>
<div class="metric-sub">수강 3개월 이내 실측</div>
</div>
<div class="metric-card">
<div class="metric-tag-text">POINT 03</div>
<div class="metric-num">100%</div>
<div class="metric-label">전담 강사 신원 검증</div>
<div class="metric-sub">SKY 및 명문대 출신 4단계 심사</div>
</div>
<div class="metric-card">
<div class="metric-tag-text">POINT 04</div>
<div class="metric-num">12,500+</div>
<div class="metric-label">누적 1:1 맞춤 배정</div>
<div class="metric-sub">전국 학군별 데이터 기반</div>
</div>
</div>
</section>
</template>
<script setup>
defineProps({
regionDong: {
type: String,
default: '해당 지역'
}
})
</script>
<style scoped>
.metrics-section {
max-width: 1080px;
margin: -24px auto 40px;
padding: 0 16px;
position: relative;
z-index: 2;
}
.metrics-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 12px;
}
.metric-card {
background: var(--bg-card, #ffffff);
border: 1px solid var(--border-color, #e2e8f0);
border-radius: var(--card-radius, 12px);
padding: clamp(14px, 2.5vw, 20px) 10px;
text-align: center;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.metric-card:hover {
transform: translateY(-3px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
}
.metric-tag {
font-size: clamp(1.2rem, 3vw, 1.6rem);
margin-bottom: 4px;
}
.metric-num {
font-size: clamp(1.15rem, 3.2vw, 1.8rem);
font-weight: 900;
color: var(--primary-color, #1e3a8a);
letter-spacing: -0.5px;
line-height: 1.2;
}
.metric-label {
font-size: clamp(0.75rem, 2vw, 0.88rem);
font-weight: 700;
color: var(--text-color, #1e293b);
margin-top: 4px;
word-break: keep-all;
}
.metric-sub {
font-size: clamp(0.68rem, 1.7vw, 0.78rem);
color: #64748b;
margin-top: 2px;
word-break: keep-all;
}
@media (max-width: 768px) {
.metrics-grid {
grid-template-columns: repeat(2, 1fr);
gap: 10px;
}
}
@media (max-width: 320px) {
.metrics-grid {
grid-template-columns: 1fr;
gap: 8px;
}
}
</style>
+330
View File
@@ -0,0 +1,330 @@
<template>
<section class="mastery-section">
<div class="section-header">
<span class="section-badge">{{ curriculum.name }} 1:1 집중 클리닉</span>
<h2 class="section-title">{{ regionDong }} {{ grade }} {{ curriculum.name }} 1등급 커리큘럼</h2>
<p class="section-desc">{{ curriculum.slogan }}</p>
</div>
<!-- 오직 해당 학년(중학생이면 중학생, 고등학생이면 고등학생)의 커리큘럼만 단일 타겟팅 렌더링 -->
<div v-if="targetGradeData" class="grade-focus-grid single-grade-view">
<!-- 카드 1: 출제 패턴 및 핵심 목표 -->
<div class="grade-focus-card">
<div class="grade-header">
<span class="grade-pill">{{ grade }} {{ curriculum.name }} 집중 솔루션</span>
<h3 class="focus-title">{{ targetGradeData.focus }}</h3>
</div>
<p class="exam-pattern-box">
<span class="badge-tag">{{ regionDong }} 내신 실전 출제 패턴</span>
{{ targetGradeData.examPattern }}
</p>
<ul class="points-list">
<li v-for="(pt, pIdx) in targetGradeData.points" :key="pIdx">
<span class="check-bullet">•</span>
<span class="pt-text">{{ pt }}</span>
</li>
</ul>
</div>
<!-- 카드 2: 1:1 맞춤 지도 세부 실행 로드맵 -->
<div class="grade-focus-card roadmap-card">
<div class="grade-header">
<span class="grade-pill accent-pill">1:1 밀착 코칭 전략</span>
<h3 class="focus-title">{{ grade }} {{ curriculum.name }} 성적 역전 3단계</h3>
</div>
<div class="roadmap-steps">
<div class="rm-step">
<div class="rm-badge">STEP 1</div>
<div>
<strong>기초 개념 & 오답 4분류 태깅</strong>
<p>자주 틀리는 개념 구멍을 즉시 메우고 오답 원인을 정밀 추적합니다.</p>
</div>
</div>
<div class="rm-step">
<div class="rm-badge">STEP 2</div>
<div>
<strong>학교 기출 변형 & 서술형 킬러 완파</strong>
<p>{{ regionDong }} 학교별 기출 족보와 부교재 변형 문제를 반복 훈련합니다.</p>
</div>
</div>
<div class="rm-step">
<div class="rm-badge">STEP 3</div>
<div>
<strong>실전 타임어택 & 서술형 감점 0점화</strong>
<p>실제 시험 시간과 동일한 환경에서 서술형 채점표 기준 감점을 방지합니다.</p>
</div>
</div>
</div>
</div>
</div>
<!-- 핵심 솔루션 3단계 스킬 (해당 과목 고유 스킬) -->
<div class="skills-wrap">
<h3 class="skills-title">{{ grade }} {{ curriculum.name }} 1등급 도약을 위한 3대 핵심 솔루션</h3>
<div class="skills-grid">
<div v-for="(sk, sIdx) in curriculum.skills" :key="sIdx" class="skill-item">
<div class="skill-num">0{{ sIdx + 1 }}</div>
<h4 class="skill-name">{{ sk.title }}</h4>
<p class="skill-desc">{{ sk.desc }}</p>
</div>
</div>
</div>
</section>
</template>
<script setup>
import { computed } from 'vue'
const props = defineProps({
regionDong: {
type: String,
required: true
},
grade: {
type: String,
default: '중학생'
},
curriculum: {
type: Object,
required: true
}
})
// 고등학생이면 고등학생 데이터, 중학생이면 중학생 데이터만 100% 매칭하여 단일 추출
const targetGradeData = computed(() => {
if (!props.curriculum || !props.curriculum.grades) return null
const isHigh = (props.grade || '').includes('고등')
if (isHigh) {
const found = props.curriculum.grades.find(g => g.grade.includes('고등'))
return found || props.curriculum.grades[1] || props.curriculum.grades[0]
} else {
const found = props.curriculum.grades.find(g => g.grade.includes('중학'))
return found || props.curriculum.grades[0]
}
})
</script>
<style scoped>
.mastery-section {
max-width: 1080px;
margin: 0 auto 50px;
padding: 0 16px;
}
.section-header {
text-align: center;
margin-bottom: 28px;
}
.section-badge {
display: inline-block;
font-size: clamp(0.78rem, 2vw, 0.88rem);
font-weight: 700;
color: var(--primary-color, #1e3a8a);
background: var(--badge-bg, rgba(30, 58, 138, 0.08));
padding: 5px 12px;
border-radius: 9999px;
margin-bottom: 8px;
}
.section-title {
font-size: clamp(1.3rem, 3.8vw, 1.95rem);
font-weight: 800;
color: var(--text-color, #1e293b);
letter-spacing: -0.6px;
word-break: keep-all;
line-height: 1.35;
}
.section-desc {
font-size: clamp(0.85rem, 2.2vw, 0.98rem);
color: #64748b;
margin-top: 6px;
word-break: keep-all;
}
.grade-focus-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 18px;
margin-bottom: 30px;
}
.grade-focus-card {
background: var(--bg-card, #ffffff);
border: 1px solid var(--border-color, #e2e8f0);
border-radius: var(--card-radius, 14px);
padding: clamp(18px, 3.5vw, 24px);
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.04);
display: flex;
flex-direction: column;
}
.grade-header {
margin-bottom: 12px;
}
.grade-pill {
display: inline-block;
font-size: 0.75rem;
font-weight: 800;
color: #ffffff;
background: var(--primary-color, #1e3a8a);
padding: 3px 10px;
border-radius: 9999px;
margin-bottom: 6px;
}
.grade-pill.accent-pill {
background: var(--accent-color, #d97706);
}
.focus-title {
font-size: clamp(1.02rem, 2.5vw, 1.2rem);
font-weight: 800;
color: var(--text-color, #0f172a);
letter-spacing: -0.4px;
}
.exam-pattern-box {
background: #f8fafc;
border-left: 3px solid var(--accent-color, #d97706);
padding: 10px 12px;
border-radius: 4px;
font-size: clamp(0.78rem, 2vw, 0.86rem);
line-height: 1.55;
color: #334155;
margin-bottom: 14px;
word-break: keep-all;
}
.badge-tag {
display: block;
font-weight: 800;
color: var(--accent-color, #d97706);
margin-bottom: 3px;
font-size: 0.82em;
}
.points-list {
list-style: none;
display: flex;
flex-direction: column;
gap: 10px;
}
.points-list li {
display: flex;
align-items: flex-start;
gap: 8px;
font-size: clamp(0.8rem, 2vw, 0.88rem);
color: #475569;
line-height: 1.5;
word-break: keep-all;
}
.check-icon {
color: #10b981;
font-weight: 900;
flex-shrink: 0;
}
.roadmap-steps {
display: flex;
flex-direction: column;
gap: 12px;
margin-top: 6px;
}
.rm-step {
display: flex;
gap: 10px;
align-items: flex-start;
}
.rm-badge {
font-size: 0.7rem;
font-weight: 800;
color: var(--primary-color, #1e3a8a);
background: rgba(30, 58, 138, 0.08);
padding: 2px 6px;
border-radius: 4px;
flex-shrink: 0;
margin-top: 2px;
}
.rm-step strong {
display: block;
font-size: 0.86rem;
color: #1e293b;
margin-bottom: 2px;
}
.rm-step p {
font-size: 0.78rem;
color: #64748b;
line-height: 1.45;
word-break: keep-all;
}
.skills-wrap {
background: var(--skills-bg, #f8fafc);
border: 1px solid var(--border-color, #e2e8f0);
border-radius: var(--card-radius, 14px);
padding: clamp(20px, 4vw, 30px);
}
.skills-title {
font-size: clamp(1.05rem, 2.8vw, 1.3rem);
font-weight: 800;
color: var(--text-color, #0f172a);
text-align: center;
margin-bottom: 20px;
letter-spacing: -0.4px;
}
.skills-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 14px;
}
.skill-item {
background: #ffffff;
border: 1px solid var(--border-color, #e2e8f0);
border-radius: 10px;
padding: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
}
.skill-num {
font-size: 1.1rem;
font-weight: 900;
color: var(--accent-color, #d97706);
margin-bottom: 4px;
}
.skill-name {
font-size: clamp(0.9rem, 2.2vw, 1rem);
font-weight: 800;
color: var(--text-color, #1e293b);
margin-bottom: 6px;
}
.skill-desc {
font-size: clamp(0.78rem, 1.9vw, 0.85rem);
color: #64748b;
line-height: 1.5;
word-break: keep-all;
}
@media (max-width: 768px) {
.grade-focus-grid {
grid-template-columns: 1fr;
}
.skills-grid {
grid-template-columns: 1fr;
}
}
</style>
+218
View File
@@ -0,0 +1,218 @@
<template>
<section class="stories-section">
<div class="section-header">
<span class="section-badge">{{ regionDong }} {{ grade }} {{ subjectName }} 성공 사례</span>
<h2 class="section-title">{{ regionDong }} {{ grade }}들의 놀라운 {{ subjectName }} 성적 변화</h2>
<p class="section-desc">공부 방법만 1:1로 정확히 교정해도 성적은 반드시 오릅니다. 실제 수강생들의 리얼 후기를 확인하세요.</p>
</div>
<!-- 학년과 과목에 100% 일치하는 맞춤형 성적 향상 수기 카드 3선 -->
<div class="stories-grid">
<div v-for="(story, idx) in matchedStories" :key="idx" class="story-card">
<div class="story-top">
<span class="student-info">{{ story.student }}</span>
<div class="grade-jump">
<span class="before">{{ story.before }}</span>
<span class="arrow">→</span>
<span class="after">{{ story.after }}</span>
</div>
</div>
<p class="story-review">"{{ story.review }}"</p>
<div class="story-sub">수강 기간: {{ story.period }} / {{ regionDong }} 1:1 맞춤 {{ subjectName }} 수업</div>
</div>
</div>
</section>
</template>
<script setup>
import { computed } from 'vue'
const props = defineProps({
regionDong: {
type: String,
required: true
},
grade: {
type: String,
default: '중학생'
},
subjectName: {
type: String,
default: '영어'
}
})
// 학년 및 과목에 100% 매칭되는 실제 성적 향상 스토리 동적 생성
const matchedStories = computed(() => {
const isHigh = (props.grade || '').includes('고등')
const dong = props.regionDong
const sub = props.subjectName
if (isHigh) {
// 고등학생 전용 스토리
return [
{
student: `${dong} 고2 김○○ 학생`,
before: `${sub} 내신 4등급 (56점)`,
after: `내신 1등급 (96점)`,
period: '3개월',
review: `학원에서는 진도 따라가기 바빴는데, 선생님께서 ${dong} 학교 부교재 킬러 변형 문항과 서술형 채점 조건을 1:1로 집중 지도해 주신 덕분에 생애 첫 1등급을 받았습니다!`
},
{
student: `${dong} 고1 박○○ 학생`,
before: `중간고사 3등급`,
after: `기말고사 전교 3등 (1등급)`,
period: '4개월',
review: `고등학교 첫 ${sub} 시험에서 서술형 감점이 심해 좌절했었어요. 선생님과 1:1 오답 역추적 노트를 작성하며 출제 의도를 파악하는 훈련을 하니 시험 시간이 10분이나 남았습니다.`
},
{
student: `${dong} 고3 이○○ 학부모님`,
before: `${sub} 수능 모평 3등급`,
after: `수능 1등급 최저 충족`,
period: '6개월',
review: `수시 최저를 맞춰야 하는 절박한 상황에서 ${dong} 맞춤 1:1 과외를 시작했습니다. 취약한 킬러 유형만 집중 공략해 주셔서 원하는 명문대에 당당히 합격했습니다!`
}
]
} else {
// 중학생 전용 스토리
return [
{
student: `${dong} 중2 이○○ 학생`,
before: `${sub} 68점 (C등급)`,
after: `중간·기말 98점 (A등급)`,
period: '3개월',
review: `중학교 첫 지필고사에서 ${sub} 시험이 너무 어려워 60점대였는데, 선생님께서 교과서 핵심 개념과 서술형 조건 영작/풀이법을 1:1로 짚어주셔서 98점으로 올랐어요!`
},
{
student: `${dong} 중3 최○○ 학생`,
before: `서술형 감점 다수 (75점)`,
after: `100점 만점 달성`,
period: '4개월',
review: `알면서도 계산 실수나 조건 누락으로 틀리던 나쁜 습관을 1:1 검토법으로 완벽히 고쳤습니다. 이번 기말고사에서 전교 1등 만점 맞고 고등 선행도 자신 있게 나가는 중입니다.`
},
{
student: `${dong} 중1 정○○ 학부모님`,
before: `자유학기 학습 습관 부족`,
after: `스스로 매일 2시간 복습`,
period: '5개월',
review: `중학교 입학 후 스마트폰만 해서 걱정이었는데, 전담 선생님께서 매일 스터디 플래너를 점검하고 ${sub} 기본기를 탄탄하게 잡아주셔서 자기주도학습 습관이 완전히 잡혔습니다.`
}
]
}
})
</script>
<style scoped>
.stories-section {
max-width: 1080px;
margin: 0 auto 50px;
padding: 0 16px;
}
.section-header {
text-align: center;
margin-bottom: 28px;
}
.section-badge {
display: inline-block;
font-size: clamp(0.78rem, 2vw, 0.88rem);
font-weight: 700;
color: var(--primary-color, #1e3a8a);
background: var(--badge-bg, rgba(30, 58, 138, 0.08));
padding: 5px 12px;
border-radius: 9999px;
margin-bottom: 8px;
}
.section-title {
font-size: clamp(1.3rem, 3.8vw, 1.95rem);
font-weight: 800;
color: var(--text-color, #1e293b);
letter-spacing: -0.6px;
word-break: keep-all;
line-height: 1.35;
}
.section-desc {
font-size: clamp(0.85rem, 2.2vw, 0.98rem);
color: #64748b;
margin-top: 6px;
word-break: keep-all;
}
.stories-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
}
.story-card {
background: var(--bg-card, #ffffff);
border: 1px solid var(--border-color, #e2e8f0);
border-radius: var(--card-radius, 14px);
padding: clamp(18px, 3vw, 24px);
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.04);
display: flex;
flex-direction: column;
justify-content: space-between;
}
.story-top {
margin-bottom: 12px;
}
.student-info {
display: block;
font-size: clamp(0.82rem, 2vw, 0.9rem);
font-weight: 800;
color: #475569;
margin-bottom: 6px;
}
.grade-jump {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
.before {
font-size: 0.82rem;
color: #94a3b8;
text-decoration: line-through;
}
.arrow {
color: var(--accent-color, #d97706);
font-weight: 900;
}
.after {
font-size: clamp(0.95rem, 2.4vw, 1.1rem);
font-weight: 900;
color: var(--primary-color, #1e3a8a);
}
.story-review {
font-size: clamp(0.82rem, 2vw, 0.92rem);
line-height: 1.6;
color: #334155;
margin-bottom: 14px;
word-break: keep-all;
flex-grow: 1;
}
.story-sub {
font-size: 0.75rem;
color: #94a3b8;
border-top: 1px dashed var(--border-color, #e2e8f0);
padding-top: 10px;
}
@media (max-width: 820px) {
.stories-grid {
grid-template-columns: 1fr;
}
}
</style>
+140
View File
@@ -0,0 +1,140 @@
<template>
<section class="teacher-section">
<div class="section-header">
<span class="section-badge">믿을 수 있는 1:1 멘토</span>
<h2 class="section-title">상위 1% 검증된 전문 강사진이 함께합니다</h2>
<p class="section-desc">단순 알바 대학생 과외가 아닙니다. 학력, 경력, 성향, 티칭 역량까지 4단계 철저한 검증을 통과한 전문 선생님만 배정합니다.</p>
</div>
<div class="steps-grid">
<div class="step-card">
<div class="step-badge">STEP 1</div>
<h3 class="step-title">신원 & 학력 100% 검증</h3>
<p class="step-desc">재학·졸업증명서, 신분증, 성범죄 경력 조회 등 공인 서류 전수 대조</p>
</div>
<div class="step-card">
<div class="step-badge">STEP 2</div>
<h3 class="step-title">과목별 심층 필기·시범강의</h3>
<p class="step-desc">기출 문제 풀이 및 20분 모의 시범 강의를 통한 개념 전달력 평가</p>
</div>
<div class="step-card">
<div class="step-badge">STEP 3</div>
<h3 class="step-title">학생 성향 매칭 인터뷰</h3>
<p class="step-desc">학생의 성격(소극적/적극적), 학습 수준, 진로 목표에 최적화된 성향 분석</p>
</div>
<div class="step-card">
<div class="step-badge">STEP 4</div>
<h3 class="step-title">무료 모의수업 & 피드백</h3>
<p class="step-desc">본 수업 전 1회 무료 수업을 통해 학생과의 호흡을 최종 검증하고 시작</p>
</div>
</div>
</section>
</template>
<style scoped>
.teacher-section {
max-width: 1080px;
margin: 0 auto 50px;
padding: 0 16px;
}
.section-header {
text-align: center;
margin-bottom: 28px;
}
.section-badge {
display: inline-block;
font-size: clamp(0.78rem, 2vw, 0.88rem);
font-weight: 700;
color: var(--primary-color, #1e3a8a);
background: var(--badge-bg, rgba(30, 58, 138, 0.08));
padding: 5px 12px;
border-radius: 9999px;
margin-bottom: 8px;
}
.section-title {
font-size: clamp(1.3rem, 3.8vw, 1.95rem);
font-weight: 800;
color: var(--text-color, #1e293b);
letter-spacing: -0.6px;
word-break: keep-all;
line-height: 1.35;
}
.section-desc {
font-size: clamp(0.85rem, 2.2vw, 0.98rem);
color: #64748b;
margin-top: 6px;
word-break: keep-all;
max-width: 680px;
margin-left: auto;
margin-right: auto;
}
.steps-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 14px;
}
.step-card {
background: var(--bg-card, #ffffff);
border: 1px solid var(--border-color, #e2e8f0);
border-radius: var(--card-radius, 14px);
padding: clamp(16px, 3vw, 22px) 14px;
text-align: center;
box-shadow: 0 3px 12px rgba(0, 0, 0, 0.04);
}
.step-badge {
display: inline-block;
font-size: 0.72rem;
font-weight: 800;
color: var(--accent-color, #d97706);
background: rgba(217, 119, 6, 0.1);
padding: 2px 8px;
border-radius: 4px;
margin-bottom: 8px;
}
.step-icon {
font-size: 2rem;
margin-bottom: 8px;
}
.step-title {
font-size: clamp(0.92rem, 2.2vw, 1.05rem);
font-weight: 800;
color: var(--text-color, #0f172a);
margin-bottom: 6px;
word-break: keep-all;
}
.step-desc {
font-size: clamp(0.75rem, 1.8vw, 0.84rem);
color: #64748b;
line-height: 1.5;
word-break: keep-all;
}
@media (max-width: 768px) {
.steps-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 360px) {
.steps-grid {
grid-template-columns: 1fr;
}
}
</style>
+207
View File
@@ -0,0 +1,207 @@
{
"korean": {
"name": "국어",
"badge": "문해력·서술형·수능비문학",
"slogan": "어휘력과 구조 독해로 내신 1등급과 수능 1등급을 동시에",
"grades": [
{
"grade": "중학생 국어",
"focus": "갈래별 개념어 확립 및 서술형 감점 0점화",
"points": [
"교과서 수록 문학(시·소설·수필) 핵심 개념어와 표현상의 특징 완벽 암기",
"문법(품사, 문장 성분, 음운 변동) 체계도 직접 작성 훈련",
"서술형 채점 기준표(조건 단어 누락 방지) 기반 1:1 첨삭 지도"
],
"examPattern": "학교별 교과서 학습활동 응용 및 외부 연계 현대시 출제 비중 35% 이상"
},
{
"grade": "고등학생 국어",
"focus": "수능 연계 EBS 독서·문학 및 내신 킬러 외부지문 정복",
"points": [
"낯선 고전문학 해석을 위한 필수 고어 150선 및 시가 갈래별 공식 체화",
"독서(비문학) 철학·경제·과학기술 제재 문단 간 유기적 독해 및 도표 분석 훈련",
"시험 범위 외 학교 프린트 및 학평/모평 기출 변형 킬러 문항 대비"
],
"examPattern": "객관식 보기 변형 및 5지선다 오답 매력도 극대화, 서술형 1문항 당 부분점수 3~4개 조건 제시"
}
],
"skills": [
{
"title": "문학 개념어 사전화",
"desc": "반어, 역설, 감정이입 등 헷갈리기 쉬운 개념어를 기출 예문과 매칭"
},
{
"title": "비문학 3색 펜 구조화",
"desc": "주제문, 근거, 대립 쌍을 시각적으로 도식화하는 독해 훈련"
},
{
"title": "서술형 키워드 적중",
"desc": "출제자가 요구하는 필수 조건 키워드를 1초 만에 캐치하여 답안 작성"
}
]
},
"english": {
"name": "영어",
"badge": "구문독해·조건영작·내신1등급",
"slogan": "단어 암기 그 이상, 문장 구조 분석과 서술형 통암기 탈피 훈련",
"grades": [
{
"grade": "중학생 영어",
"focus": "핵심 문법 뼈대 완성과 교과서 본문 어법 변형 대비",
"points": [
"to부정사, 동명사, 관계대명사, 수동태 등 핵심 10대 문법 완벽 정복",
"교과서 대화문 및 본문 단순 암기가 아닌 어법 변형 문항 실전 풀이",
"중간·기말고사 대비 서술형 조건 영작(단어 수 제한, 형태 변형) 집중 훈련"
],
"examPattern": "어법상 어색한 문장 개수 고르기(모두 고르시오) 및 본문 빈칸 영작 출제"
},
{
"grade": "고등학생 영어",
"focus": "모의고사 변형 부교재 완벽 분석 및 1등급 가르는 킬러 영작",
"points": [
"학교별 부교재(수능특강, 올림포스, 자이스토리) 외부 지문 패러프레이징 분석",
"어휘 유의어/반의어 정리 및 지문 내용 빈칸 추론 변형 완벽 대비",
"서술형 주제문 영작(도치, 가정법, 분사구문 등 복합 구문 적용)"
],
"examPattern": "지문 어휘 변형 40% 이상, 서술형 조건 영작 배점 30점 이상으로 최상위권 변별"
}
],
"skills": [
{
"title": "구문 끊어읽기 맵핑",
"desc": "주어·동사·수식어구를 직관적으로 묶어 긴 복문도 3초 내 파악"
},
{
"title": "학교별 기출 족보 변형",
"desc": "최근 3개년 학교 기출 문항 유형을 분석하여 유사 변형 문제 반복 풀이"
},
{
"title": "서술형 감점 방지 훈련",
"desc": "단복수, 수일치, 시제, 전치사 오류를 사전에 차단하는 셀프 검토법"
}
]
},
"math": {
"name": "수학",
"badge": "개념정립·오답클리닉·킬러문항",
"slogan": "공식 암기가 아닌 개념 원리 추론, 오답의 원인을 뿌리 뽑는 1:1 솔루션",
"grades": [
{
"grade": "중학생 수학",
"focus": "연산 실수 제로화 및 중등 도형·대수 연계 심화 개념 체화",
"points": [
"소인수분해부터 이차방정식, 이차함수까지 고등 연계 대수 영역 기초 확립",
"삼각형·원의 성질 등 중등 기하(도형) 성질을 증명하고 적용하는 논리력 훈련",
"계산 실수 노트를 통한 자주 틀리는 계산 유형 집중 교정"
],
"examPattern": "교과서 외 심화 유형서(에이급, 블랙라벨) 스텝 2~3 수준 3~4문항 출제"
},
{
"grade": "고등학생 수학",
"focus": "공통수학 및 수1, 수2, 미적분/확통 킬러 4점 문항 정복",
"points": [
"개념의 유도 과정부터 실전 적용까지 백지 복습법으로 완전 체화",
"모의고사/수능 기출 준킬러 문항의 조건 해석 및 발상 노트 작성",
"학교별 부교재(EBS, 수능완성 등) 반복 회독 및 서술형 단계별 감점 요소 제거"
],
"examPattern": "제한 시간 50분 대비 문항 수가 많아 시간 안배 및 준킬러 신속 풀이가 1등급 결정"
}
],
"skills": [
{
"title": "1:1 오답 역추적 클리닉",
"desc": "틀린 문제의 개념 오류인지 연산 실수인지 정확히 분리해 맞춤 처방"
},
{
"title": "조건 해석 공식화",
"desc": "문제 속 숨은 수학적 조건(정수 조건, 범위, 극값 등)을 찾아내는 훈련"
},
{
"title": "실전 타임어택 모의평가",
"desc": "실제 시험과 동일한 OMR 카드와 시간 제한으로 실전 긴장감 극복"
}
]
},
"science": {
"name": "과학",
"badge": "통합과학·물화생지·탐구보고서",
"slogan": "원리 이해와 실험 탐구, 킬러 계산 문항까지 완벽 대비",
"grades": [
{
"grade": "중학생 과학",
"focus": "물상/생물 영역의 기본 법칙 이해와 암기 체계화",
"points": [
"빛과 파동, 화학반응식, 유전 등 복잡한 과학 원리의 시각적 도식화 이해",
"단원별 핵심 과학 용어와 정의 완벽 암기",
"실험 과정-결과-해석으로 이어지는 탐구형 문항 정복"
],
"examPattern": "실험 보고서 기반 객관식 문항 및 오차 원인 분석 서술형 출제"
},
{
"grade": "고등학생 통합과학/과탐",
"focus": "통합과학 내신 1등급 및 과탐 I/II 수능 연계 킬러 정복",
"points": [
"역학적 시스템(물리), 중화반응·산화환원(화학) 고난도 계산 집중 공략",
"지구시스템, 생명시스템의 방대한 암기 내용을 마인드맵으로 일목요연 정리",
"과학탐구실험 수행평가 만점 보고서 작성 1:1 컨설팅"
],
"examPattern": "수능형 자료(그래프, 실험 도표) 해석 문항이 50% 이상 차지하여 자료 해석력 필수"
}
],
"skills": [
{
"title": "원리 도해 노트",
"desc": "복잡한 과학 현상을 그림과 도표로 직접 그려보며 원리 직관화"
},
{
"title": "자료 해석 3단계 스캔",
"desc": "가로축/세로축 변인 통제 -> 변곡점 확인 -> 결론 도출의 정형화"
},
{
"title": "서술형 과학 용어 완성",
"desc": "교과서 공인 학술 용어를 사용하여 채점관 감점 빌미 제거"
}
]
},
"social": {
"name": "사회",
"badge": "통합사회·한국사·수행평가",
"slogan": "단순 암기가 아닌 역사적 흐름과 시사 자료 분석의 융합",
"grades": [
{
"grade": "중학생 사회/역사",
"focus": "시대순 연표 흐름과 지리·일반사회 기본 개념 정립",
"points": [
"한국사 및 세계사 핵심 사건의 원인-전개-결과 인과관계 구조화",
"지형도, 기후 그래프, 지도 자료를 보고 특징을 유추하는 시각 자료 분석",
"정치와 법, 경제 단원의 헷갈리는 사회 제도 용어 정리"
],
"examPattern": "지도 및 사료 제시형 문항, 시대 순서 배열 문항 다수 출제"
},
{
"grade": "고등학생 통합사회/한국사",
"focus": "통합사회 융합 서술형 및 수능 필수 한국사 만점 전략",
"points": [
"사회적 딜레마(윤리, 환경, 인권) 관련 학교별 수행평가 논술 1:1 지도",
"사탐 선택과목(생윤, 사문, 한지, 정법 등) 킬러 도표·양적 계산 완벽 훈련",
"한국사 근현대사 촘촘한 연도별 조약 및 단체 활동 암기 카드 제공"
],
"examPattern": "지문 사료의 미세한 단서를 통한 인물/사건 특정 및 시사 융합 서술형 출제"
}
],
"skills": [
{
"title": "인과관계 스토리텔링",
"desc": "역사적 사건의 전후 맥락을 인과관계로 엮어 잊히지 않는 장기기억화"
},
{
"title": "통계/도표 역산 기법",
"desc": "사회문화, 한국지리 등 킬러 통계 문항의 빠른 수식 계산법 전수"
},
{
"title": "세특 연계 보고서 가이드",
"desc": "사회적 쟁점을 학생의 희망 진로와 연결하는 탐구 보고서 피드백"
}
]
}
}
+743
View File
@@ -0,0 +1,743 @@
[
{
"code": "7480237",
"name": "강동고등학교",
"region": "울산광역시",
"sigungu": "북구",
"dong": "산하동",
"address": "울산광역시 북구 화암4길 8",
"detailAddress": "(산하동, 강동고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://gang-dong.hs.kr "
},
{
"code": "7480124",
"name": "남목고등학교",
"region": "울산광역시",
"sigungu": "동구",
"dong": "서부동",
"address": "울산광역시 동구 방어진순환도로 1200",
"detailAddress": "(서부동,남목고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://school.use.go.kr/nammok-h"
},
{
"code": "7480023",
"name": "남창고등학교",
"region": "울산광역시",
"sigungu": "울주군",
"dong": "온양읍",
"address": "울산광역시 울주군 온양읍 태화7길 43-16",
"detailAddress": ", 남창고등학교 (온양읍)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://namchang.hs.kr"
},
{
"code": "7480126",
"name": "다운고등학교",
"region": "울산광역시",
"sigungu": "중구",
"dong": "다운동",
"address": "울산광역시 중구 다운로 180",
"detailAddress": "(다운동, 다운고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.daun.hs.kr/"
},
{
"code": "7480135",
"name": "달천고등학교",
"region": "울산광역시",
"sigungu": "북구",
"dong": "달천동",
"address": "울산광역시 북구 달천철장길 23",
"detailAddress": "(달천동, 달천고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://dalcheon.hs.kr"
},
{
"code": "7480069",
"name": "대송고등학교",
"region": "울산광역시",
"sigungu": "동구",
"dong": "화정동",
"address": "울산광역시 동구 봉수로 210",
"detailAddress": "(화정동, 대송고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.daesong.hs.kr"
},
{
"code": "7480093",
"name": "대현고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "야음동",
"address": "울산광역시 남구 수암로 164",
"detailAddress": ", 대현고등학교 (야음동, 야음교육단지)",
"type": "일반고",
"coedu": "남",
"foundation": "공립",
"homepage": "http://daehyun.hs.kr"
},
{
"code": "7480199",
"name": "매곡고등학교",
"region": "울산광역시",
"sigungu": "북구",
"dong": "매곡동",
"address": "울산광역시 북구 매산로 45",
"detailAddress": ", 매곡고등학교 (매곡동)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.maegok.hs.kr"
},
{
"code": "7480107",
"name": "무거고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "무거동",
"address": "울산광역시 남구 대학로1번길 17-28",
"detailAddress": "(무거동, 무거고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.mugeo.hs.kr"
},
{
"code": "7480070",
"name": "무룡고등학교",
"region": "울산광역시",
"sigungu": "북구",
"dong": "연암동",
"address": "울산광역시 북구 사청1길 30",
"detailAddress": "(연암동, 무룡고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://muryong.hs.kr"
},
{
"code": "7480088",
"name": "문수고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "무거동",
"address": "울산광역시 남구 울밀로 2905",
"detailAddress": "(무거동, 문수고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://munsu.hs.kr"
},
{
"code": "7480108",
"name": "문현고등학교",
"region": "울산광역시",
"sigungu": "동구",
"dong": "방어동",
"address": "울산광역시 동구 화잠7길 25",
"detailAddress": "(방어동, 문현고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.mun-hyun.hs.kr"
},
{
"code": "7480024",
"name": "방어진고등학교",
"region": "울산광역시",
"sigungu": "동구",
"dong": "화정동",
"address": "울산광역시 동구 학문로 50",
"detailAddress": "(화정동, 방어진고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "www.bangeojin.hs.kr"
},
{
"code": "7480125",
"name": "범서고등학교",
"region": "울산광역시",
"sigungu": "울주군",
"dong": "범서읍",
"address": "울산광역시 울주군 범서읍 대리로 69",
"detailAddress": "(범서읍, 범서고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "school.use.go.kr/beomseo-h"
},
{
"code": "7480096",
"name": "삼산고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "삼산동",
"address": "울산광역시 남구 돋질로339번길 13",
"detailAddress": "(삼산동, 삼산고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://ussamsan.hs.kr"
},
{
"code": "7480033",
"name": "성광여자고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "옥동",
"address": "울산광역시 남구 남부순환도로 97",
"detailAddress": "(옥동)",
"type": "일반고",
"coedu": "여",
"foundation": "사립",
"homepage": "http://sungkwang.hs.kr/"
},
{
"code": "7480034",
"name": "성신고등학교",
"region": "울산광역시",
"sigungu": "중구",
"dong": "복산동",
"address": "울산광역시 중구 성신고교길 26",
"detailAddress": "(복산동, 성신고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "사립",
"homepage": "https://school.use.go.kr/sungshin-h"
},
{
"code": "7480095",
"name": "신선여자고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "야음동",
"address": "울산광역시 남구 수암로178번길 14",
"detailAddress": "(야음동, 야음교육단지)",
"type": "일반고",
"coedu": "여",
"foundation": "공립",
"homepage": "http://shinsun.hs.kr"
},
{
"code": "7480072",
"name": "신정고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "신정동",
"address": "울산광역시 남구 문수로 458",
"detailAddress": "(신정동, 신정고등학교)",
"type": "일반고",
"coedu": "남",
"foundation": "공립",
"homepage": "http://www.shinjung-us.hs.kr/"
},
{
"code": "7480189",
"name": "약사고등학교",
"region": "울산광역시",
"sigungu": "중구",
"dong": "약사동",
"address": "울산광역시 중구 종가로 560",
"detailAddress": "(약사동)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.yaksa.hs.kr"
},
{
"code": "7480188",
"name": "언양고등학교",
"region": "울산광역시",
"sigungu": "울주군",
"dong": "언양읍",
"address": "울산광역시 울주군 언양읍 언양로 53",
"detailAddress": "(언양읍)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "https://school.use.go.kr/eonyang-h"
},
{
"code": "7480205",
"name": "온산고등학교",
"region": "울산광역시",
"sigungu": "울주군",
"dong": "온산읍",
"address": "울산광역시 울주군 온산읍 명봉거남로 76",
"detailAddress": "(온산읍, 온산고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://onsan.hs.kr"
},
{
"code": "7480074",
"name": "우신고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "무거동",
"address": "울산광역시 남구 대학로1번길 29",
"detailAddress": "(무거동, 우신고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "사립",
"homepage": "http://www.woo-shin.hs.kr"
},
{
"code": "7480254",
"name": "울산가온고등학교",
"region": "울산광역시",
"sigungu": "중구",
"dong": "반구동",
"address": "울산광역시 중구 내황2길 33",
"detailAddress": "(반구동,울산가온고등학교)",
"type": "일반고",
"coedu": "여",
"foundation": "공립",
"homepage": "https://school.use.go.kr/nanwon-h"
},
{
"code": "7480142",
"name": "울산강남고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "신정동",
"address": "울산광역시 남구 팔등로 115",
"detailAddress": ", 22 (신정동)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://ugn.hs.kr"
},
{
"code": "7480075",
"name": "울산경의고등학교",
"region": "울산광역시",
"sigungu": "울주군",
"dong": "상북면",
"address": "울산광역시 울주군 상북면 상북로 248",
"detailAddress": "(상북면)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "사립",
"homepage": "http://gyeongui.hs.kr"
},
{
"code": "7480035",
"name": "울산고등학교",
"region": "울산광역시",
"sigungu": "중구",
"dong": "복산동",
"address": "울산광역시 중구 도화골15길 15",
"detailAddress": "(복산동, 울산고등학교)",
"type": "일반고",
"coedu": "남",
"foundation": "사립",
"homepage": "www.ulsan-hs.hs.kr"
},
{
"code": "7480044",
"name": "울산공업고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "신정동",
"address": "울산광역시 남구 중앙로204번길 49",
"detailAddress": ", 울산공업고등학교 (신정동)",
"type": "특성화고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://ust.hs.kr"
},
{
"code": "7480110",
"name": "울산과학고등학교",
"region": "울산광역시",
"sigungu": "울주군",
"dong": "상북면",
"address": "울산광역시 울주군 상북면 도동신리로",
"detailAddress": ", 117 (상북면)",
"type": "특목고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.ushs.hs.kr"
},
{
"code": "7480208",
"name": "울산기술공업고등학교",
"region": "울산광역시",
"sigungu": "울주군",
"dong": "온산읍",
"address": "울산광역시 울주군 온산읍 덕망로 54",
"detailAddress": ", 울산기술공업고등학교 (온산읍)",
"type": "특성화고",
"coedu": "남여공학",
"foundation": "사립",
"homepage": "http://www.ue.hs.kr"
},
{
"code": "7480172",
"name": "울산동천고등학교",
"region": "울산광역시",
"sigungu": "북구",
"dong": "천곡동",
"address": "울산광역시 북구 고래로 54",
"detailAddress": "(천곡동, 동천고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.usdc.hs.kr"
},
{
"code": "7480143",
"name": "울산마이스터고등학교",
"region": "울산광역시",
"sigungu": "북구",
"dong": "효문동",
"address": "울산광역시 북구 율동6길 7",
"detailAddress": "(효문동,울산마이스터고등학교)",
"type": "특목고",
"coedu": "남",
"foundation": "공립",
"homepage": "https://school.use.go.kr/ulsanmeister-h/M01/"
},
{
"code": "7480173",
"name": "울산미용예술고등학교",
"region": "울산광역시",
"sigungu": "울주군",
"dong": "웅촌면",
"address": "울산광역시 울주군 웅촌면 학교길 26",
"detailAddress": "(웅촌면, 울산미용예술고등학교)",
"type": "특성화고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://uba.hs.kr"
},
{
"code": "7480190",
"name": "울산산업고등학교",
"region": "울산광역시",
"sigungu": "울주군",
"dong": "삼남읍",
"address": "울산광역시 울주군 삼남읍 반구대로 675",
"detailAddress": "울산산업고등학교",
"type": "특성화고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.usup.hs.kr"
},
{
"code": "7480252",
"name": "울산삼일고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "선암동",
"address": "울산광역시 남구 두왕로190번길 59",
"detailAddress": "(선암동, 울산삼일고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "사립",
"homepage": "http://www.samil-us.hs.kr"
},
{
"code": "7480198",
"name": "울산상업고등학교",
"region": "울산광역시",
"sigungu": "울주군",
"dong": "범서읍",
"address": "울산광역시 울주군 범서읍 장검길 11",
"detailAddress": ", 울산상업고등학교 (범서읍)",
"type": "특성화고",
"coedu": "남",
"foundation": "공립",
"homepage": "https://school.use.go.kr/ulsan-h/M01"
},
{
"code": "7480047",
"name": "울산생활과학고등학교",
"region": "울산광역시",
"sigungu": "동구",
"dong": "화정동",
"address": "울산광역시 동구 학문로 70",
"detailAddress": "(화정동, 울산생활과학고등학교)",
"type": "특성화고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.uvhe.hs.kr"
},
{
"code": "7480191",
"name": "울산스포츠과학고등학교",
"region": "울산광역시",
"sigungu": "북구",
"dong": "산하동",
"address": "울산광역시 북구 산음3길 16",
"detailAddress": ", 울산스포츠과학고등학교 (산하동)",
"type": "특목고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.ussmh.hs.kr"
},
{
"code": "7480087",
"name": "울산애니원고등학교",
"region": "울산광역시",
"sigungu": "중구",
"dong": "성안동",
"address": "울산광역시 중구 성안11길 21",
"detailAddress": "(성안동, 울산애니원고등학교)",
"type": "특성화고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.anione.hs.kr"
},
{
"code": "7480183",
"name": "울산에너지고등학교",
"region": "울산광역시",
"sigungu": "북구",
"dong": "화봉동",
"address": "울산광역시 북구 화동2길 28",
"detailAddress": ", 울산에너지고등학교 (화봉동, 울산에너지고등학교)",
"type": "특목고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.usenergy.hs.kr/"
},
{
"code": "7480026",
"name": "울산여자고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "신정동",
"address": "울산광역시 남구 삼산로9번길 16",
"detailAddress": ", 울산여자고등학교 (신정동)",
"type": "일반고",
"coedu": "여",
"foundation": "공립",
"homepage": "http://ulsan-gh.hs.kr"
},
{
"code": "7480048",
"name": "울산여자상업고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "신정동",
"address": "울산광역시 남구 두왕로 304",
"detailAddress": "(신정동, 울산여자상업고등학교)",
"type": "특성화고",
"coedu": "여",
"foundation": "공립",
"homepage": "http://www.ulsangch.hs.kr"
},
{
"code": "7480036",
"name": "울산예술고등학교",
"region": "울산광역시",
"sigungu": "울주군",
"dong": "웅촌면",
"address": "울산광역시 울주군 웅촌면 웅촌로 621-6",
"detailAddress": "(웅촌면, 울산예술고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "사립",
"homepage": "http://ulsanart.hs.kr"
},
{
"code": "7480141",
"name": "울산외국어고등학교",
"region": "울산광역시",
"sigungu": "북구",
"dong": "중산동",
"address": "울산광역시 북구 중산동로 32-46",
"detailAddress": ", 울산외국어고등학교 (중산동, 울산외국어고등학교)",
"type": "특목고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.ufl.hs.kr"
},
{
"code": "7480037",
"name": "울산제일고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "옥동",
"address": "울산광역시 남구 남부순환도로 107",
"detailAddress": "(옥동, 울산제일고등학교)",
"type": "일반고",
"coedu": "남",
"foundation": "사립",
"homepage": "http://www.ulsanjeil.hs.kr"
},
{
"code": "7480027",
"name": "울산중앙고등학교",
"region": "울산광역시",
"sigungu": "중구",
"dong": "태화동",
"address": "울산광역시 중구 난곡로 33",
"detailAddress": "(태화동, 중앙고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://usja.hs.kr"
},
{
"code": "7480209",
"name": "천상고등학교",
"region": "울산광역시",
"sigungu": "울주군",
"dong": "범서읍",
"address": "울산광역시 울주군 범서읍 당앞로 96",
"detailAddress": "천상고등학교 (범서읍)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://cheonsang.hs.kr"
},
{
"code": "7480029",
"name": "학성고등학교",
"region": "울산광역시",
"sigungu": "남구",
"dong": "신정동",
"address": "울산광역시 남구 문수로 436",
"detailAddress": "(신정동,학성고등학교)",
"type": "일반고",
"coedu": "남",
"foundation": "공립",
"homepage": "http://www.haksung.hs.kr"
},
{
"code": "7480030",
"name": "학성여자고등학교",
"region": "울산광역시",
"sigungu": "중구",
"dong": "약사동",
"address": "울산광역시 중구 화합로 466",
"detailAddress": "(약사동, 학성여자고등학교)",
"type": "일반고",
"coedu": "여",
"foundation": "공립",
"homepage": "http://www.hakseong-g.hs.kr"
},
{
"code": "7480094",
"name": "함월고등학교",
"region": "울산광역시",
"sigungu": "중구",
"dong": "유곡동",
"address": "울산광역시 중구 종가3길 25",
"detailAddress": "(유곡동, 함월고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://hamwol.hs.kr"
},
{
"code": "7480039",
"name": "현대고등학교",
"region": "울산광역시",
"sigungu": "동구",
"dong": "서부동",
"address": "울산광역시 동구 봉수로 455",
"detailAddress": "(서부동, 현대고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "사립",
"homepage": "http://www.hdhs.or.kr/"
},
{
"code": "7480186",
"name": "현대공업고등학교",
"region": "울산광역시",
"sigungu": "동구",
"dong": "",
"address": "울산광역시 동구 미포로 122",
"detailAddress": "현대공업고등학교 ",
"type": "특목고",
"coedu": "남여공학",
"foundation": "사립",
"homepage": "http://hit.hs.kr"
},
{
"code": "7480085",
"name": "현대청운고등학교",
"region": "울산광역시",
"sigungu": "동구",
"dong": "서부동",
"address": "울산광역시 동구 방어진순환도로 1077",
"detailAddress": "(서부동)",
"type": "자율고",
"coedu": "남여공학",
"foundation": "사립",
"homepage": "https://school.use.go.kr/hcu-h"
},
{
"code": "7480109",
"name": "호계고등학교",
"region": "울산광역시",
"sigungu": "북구",
"dong": "호계동",
"address": "울산광역시 북구 동대11길 31",
"detailAddress": "(호계동, 호계고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://hogye.hs.kr"
},
{
"code": "7480171",
"name": "화봉고등학교",
"region": "울산광역시",
"sigungu": "북구",
"dong": "화봉동",
"address": "울산광역시 북구 화동로 47",
"detailAddress": "(화봉동, 화봉고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "http://www.hwabong.hs.kr"
},
{
"code": "7480083",
"name": "화암고등학교",
"region": "울산광역시",
"sigungu": "동구",
"dong": "방어동",
"address": "울산광역시 동구 화암7길 55",
"detailAddress": "(방어동, 화암고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "https://school.use.go.kr/hwaam-h"
},
{
"code": "7480073",
"name": "효정고등학교",
"region": "울산광역시",
"sigungu": "북구",
"dong": "효문동",
"address": "울산광역시 북구 율동2길 41",
"detailAddress": "(효문동,효정고등학교)",
"type": "일반고",
"coedu": "남여공학",
"foundation": "공립",
"homepage": "https://school.use.go.kr/hyojung-h"
}
]
+746
View File
@@ -0,0 +1,746 @@
{
"영어": {
"name": "영어",
"slug": "english",
"badge": "수능·내신 1등급",
"summary": "중·고등 1:1 밀착 내신 서술형 및 수능 1등급 집중 완성",
"coreKeywords": [
"영어 과외",
"영어 내신 과외",
"영어 내신 대비",
"영어 학원",
"영어 1:1 과외",
"공통영어 과외",
"영어 서술형 대비",
"수능 영어 과외",
"영어 전문 과외",
"내신 영어 학원"
],
"studentKeywords": {
"시험 정보": [
"영어 기출",
"영어 기출문제",
"영어 족보",
"영어 시험범위",
"영어 시험 난이도",
"영어 중간고사",
"영어 기말고사",
"영어 서술형",
"영어 시험 유형",
"영어 출제 경향",
"영어 평균",
"영어 등급컷",
"영어 시험 후기",
"영어 시험 시간 부족",
"수능특강 영어"
],
"교재·지문": [
"영어 부교재",
"영어 교과서",
"영어 교과서 출판사",
"영어 프린트",
"영어 필기",
"영어 외부지문",
"영어 연계 지문",
"모의고사 변형문제",
"영어 지문 분석",
"공통영어 기출",
"영어1 기출",
"영어2 기출",
"영어 단어장",
"영어 구문독해",
"어법 끝"
],
"공부·성적": [
"영어 1등급",
"영어 2등급",
"영어 공부법",
"영어 내신 공부법",
"영어 등급 올리는 법",
"영어 문법 정리",
"영어 벼락치기",
"영어 서술형 감점",
"영어 단어 암기법",
"영어 모의고사 1등급",
"영포자 탈출",
"영어 빈칸추론",
"영어 순서배열",
"영어 세특 주제",
"영어 성취도 분포"
]
},
"parentKeywords": {
"과외·학원 찾기": [
"영어 과외 선생님 추천",
"영어 과외 구하기",
"영어 방문 과외",
"영어 화상 과외",
"영어 개인과외",
"영어 과외 비용",
"영어 과외비",
"영어 과외 후기",
"영어 과외 상담",
"영어 학원 추천",
"영어 근처 학원",
"영어 과외 vs 학원",
"영어 대학생 과외",
"영어 전문 강사 과외",
"영어 단기 과외"
],
"과목·학년": [
"공통영어 과외",
"공통영어1 과외",
"공통영어2 과외",
"영어1 과외",
"영어2 과외",
"1학년 영어 과외",
"2학년 영어 과외",
"3학년 영어 과외",
"예비고1 영어 과외",
"영어 선행",
"영어 문법 과외",
"영어 독해 과외",
"영어 구문 과외",
"영어 어휘 과외",
"영어 서술형 과외"
],
"성적·시기": [
"영어 내신 올리기",
"영어 등급 올리기",
"영어 기초 과외",
"영어 심화 과외",
"영포자 과외",
"영어 노베이스 과외",
"영어 하위권 과외",
"영어 상위권 과외",
"영어 서술형 대비",
"영어 중간고사 대비 과외",
"영어 기말고사 대비 과외",
"영어 시험기간 단기 과외",
"영어 겨울방학 과외",
"영어 내신 수능 병행",
"수능 영어 과외"
]
}
},
"국어": {
"name": "국어",
"slug": "korean",
"badge": "독서·문학·문법 완벽대비",
"summary": "교과서 및 외부지문 완벽 분석, 서술형 감점 제로 및 수능 국어 연계 훈련",
"coreKeywords": [
"국어 과외",
"국어 내신 과외",
"국어 내신 대비",
"국어 내신",
"국어 학원",
"국어 1:1 과외",
"국어 전문 과외",
"국어 과외 추천",
"국어 과외 선생님",
"국어 내신 학원"
],
"studentKeywords": {
"시험 정보": [
"국어 기출",
"국어 기출문제",
"국어 족보",
"국어 시험범위",
"국어 시험 난이도",
"국어 중간고사",
"국어 기말고사",
"국어 서술형",
"국어 시험 유형",
"국어 출제 경향",
"국어 평균",
"국어 등급컷",
"국어 시험 후기",
"국어 시험 시간 부족",
"문학 시험범위"
],
"교재·지문": [
"국어 부교재",
"국어 교과서",
"국어 교과서 출판사",
"국어 프린트",
"국어 필기",
"국어 수업 필기 정리",
"국어 외부지문",
"국어 연계 작품",
"국어 모의고사 변형",
"국어 변형문제",
"국어 작품 정리",
"공통국어 기출",
"공통국어 시험범위",
"문학 기출",
"독서와 작문 기출"
],
"공부·성적": [
"국어 1등급",
"국어 2등급",
"국어 공부법",
"국어 내신 공부법",
"국어 올리는 법",
"국어 문법",
"국어 문법 정리",
"국어 벼락치기",
"국어 서술형 감점",
"국어 수행평가",
"국어 독서 수행평가",
"국어 글쓰기 수행평가",
"국어 발표 수행평가",
"국어 세특 주제",
"국어 성취도 분포"
]
},
"parentKeywords": {
"과외·학원 찾기": [
"국어 과외 선생님 추천",
"국어 과외 구하기",
"국어 방문 과외",
"국어 화상 과외",
"국어 개인과외",
"국어 과외 비용",
"국어 과외비",
"국어 과외 후기",
"국어 과외 상담",
"국어 학원 추천",
"국어 근처 학원",
"국어 과외 vs 학원",
"국어 대학생 과외",
"국어 전문 강사 과외",
"국어 단기 과외"
],
"과목·학년": [
"공통국어 과외",
"공통국어1 과외",
"공통국어2 과외",
"문학 과외",
"독서 과외",
"독서와 작문 과외",
"화법과 언어 과외",
"국어 문법 과외",
"비문학 과외",
"고전문학 과외",
"1학년 국어 과외",
"2학년 국어 과외",
"3학년 국어 과외",
"예비고1 국어 과외",
"국어 선행"
],
"성적·시기": [
"국어 내신 올리기",
"국어 등급 올리기",
"국어 기초 과외",
"국어 심화 과외",
"국어 노베이스 과외",
"국어 하위권 과외",
"국어 상위권 과외",
"국어 서술형 대비",
"국어 중간고사 대비 과외",
"국어 기말고사 대비 과외",
"국어 시험기간 단기 과외",
"국어 겨울방학 과외",
"국어 내신 수능 병행",
"수능 국어 과외",
"국어 독해력 과외"
]
}
},
"수학": {
"name": "수학",
"slug": "math",
"badge": "개념 완성·킬러 문항 정복",
"summary": "공통수학·대수·미적분·기하 개념부터 심화 킬러문항까지 1:1 맞춤 피드백",
"coreKeywords": [
"수학 과외",
"수학 내신 과외",
"수학 내신 대비",
"수학 학원",
"수학 1:1 과외",
"공통수학 과외",
"수학 서술형 대비",
"수능 수학 과외",
"수학 전문 과외",
"수포자 탈출 과외"
],
"studentKeywords": {
"시험 정보": [
"수학 기출",
"수학 기출문제",
"수학 족보",
"수학 시험범위",
"수학 시험 난이도",
"수학 중간고사",
"수학 기말고사",
"수학 서술형",
"수학 출제 경향",
"수학 평균",
"수학 등급컷",
"수학 시험 후기",
"수학 시간 부족",
"공통수학 기출",
"대수 기출"
],
"교재·지문": [
"수학 부교재",
"수학 교과서",
"수학 교과서 출판사",
"수학 프린트",
"수학 오답노트",
"수학 부교재 변형문제",
"쎈 수학",
"블랙라벨",
"일품",
"마더텅 수학",
"자이스토리",
"수학 서술형 풀이집",
"수학 개념원리",
"수학의 정석",
"수학 수행평가"
],
"공부·성적": [
"수학 1등급",
"수학 2등급",
"수학 공부법",
"수학 내신 공부법",
"수학 올리는 법",
"수학 공식 암기법",
"수학 벼락치기",
"수학 서술형 감점 방지",
"수포자 공부법",
"수학 킬러문제 풀이법",
"수학 오답 정리법",
"수학 세특 주제",
"수학 성취도 분포",
"수학 모의고사 1등급",
"수학 계산실수 줄이기"
]
},
"parentKeywords": {
"과외·학원 찾기": [
"수학 과외 선생님 추천",
"수학 과외 구하기",
"수학 방문 과외",
"수학 화상 과외",
"수학 개인과외",
"수학 과외 비용",
"수학 과외비",
"수학 과외 후기",
"수학 과외 상담",
"수학 학원 추천",
"수학 근처 학원",
"수학 과외 vs 학원",
"수학 대학생 과외",
"수학 전문 강사 과외",
"수학 단기 과외"
],
"과목·학년": [
"공통수학1 과외",
"공통수학2 과외",
"대수 과외",
"미적분1 과외",
"미적분2 과외",
"확률과 통계 과외",
"기하 과외",
"1학년 수학 과외",
"2학년 수학 과외",
"3학년 수학 과외",
"예비고1 수학 선행",
"중학 수학 총정리",
"고등 수학 선행",
"수학 심화 과외",
"수학 기초 과외"
],
"성적·시기": [
"수학 내신 올리기",
"수학 등급 올리기",
"수학 기초 과외",
"수학 심화 과외",
"수포자 과외",
"수학 노베이스 과외",
"수학 하위권 과외",
"수학 상위권 과외",
"수학 서술형 대비",
"수학 중간고사 대비 과외",
"수학 기말고사 대비 과외",
"수학 시험기간 단기 과외",
"수학 방학 특강 과외",
"내신 수능 병행 수학",
"수능 수학 과외"
]
}
},
"과학": {
"name": "과학",
"slug": "science",
"badge": "통합과학·물화생지 마스터",
"summary": "원리 이해와 계산 추론 완벽 정리, 탐구실험 수행평가 및 서술형 평가 집중 대비",
"coreKeywords": [
"과학 과외",
"과학 내신 과외",
"과학 내신 대비",
"통합과학 과외",
"과학 학원",
"과학 내신",
"통합과학 내신",
"과학 1:1 과외",
"과학 전문 과외",
"과학 과외 선생님"
],
"studentKeywords": {
"시험 정보": [
"과학 기출",
"과학 기출문제",
"과학 족보",
"과학 시험범위",
"과학 시험 난이도",
"과학 중간고사",
"과학 기말고사",
"과학 서술형",
"과학 시험 유형",
"과학 출제 경향",
"과학 평균",
"과학 등급컷",
"과학 시험 후기",
"과학 부교재",
"과학 교과서"
],
"과목별": [
"통합과학 기출",
"통합과학 시험범위",
"통합과학 시험 난이도",
"통합과학 서술형",
"통합과학 교과서",
"물리 기출",
"물리 시험범위",
"화학 기출",
"화학 시험범위",
"생명과학 기출",
"생명과학 시험범위",
"지구과학 기출",
"지구과학 시험범위",
"과학 선택과목",
"과학 선택과목 추천"
],
"공부·수행": [
"과학 1등급",
"과학 공부법",
"과학 내신 공부법",
"과학 암기법",
"과학 계산 문제",
"과학 벼락치기",
"과학 문제집 추천",
"과학 프린트",
"과학 수행평가",
"과학탐구실험 수행평가",
"과학탐구실험 보고서",
"과학 실험 보고서",
"과학 탐구 보고서",
"과학 세특 주제",
"과학 성취도 분포"
]
},
"parentKeywords": {
"과외·학원 찾기": [
"과학 과외 추천",
"과학 과외 선생님 추천",
"과학 과외 구하기",
"과학 방문 과외",
"과학 화상 과외",
"과학 개인과외",
"과학 과외 비용",
"과학 과외비",
"과학 과외 후기",
"과학 과외 상담",
"과학 학원 추천",
"과학 내신 학원",
"과학 근처 학원",
"과학 과외 vs 학원",
"과학 단기 과외"
],
"과목·학년": [
"통합과학1 과외",
"통합과학2 과외",
"통합과학 내신 대비",
"통합과학 선행",
"물리 과외",
"물리학 과외",
"화학 과외",
"생명과학 과외",
"지구과학 과외",
"물리 내신",
"화학 내신",
"생명과학 내신",
"지구과학 내신",
"1학년 과학 과외",
"2학년 과학 과외"
],
"성적·시기": [
"과학 내신 올리기",
"과학 등급 올리기",
"과학 기초 과외",
"과학 노베이스 과외",
"과학 하위권 과외",
"과학 상위권 과외",
"과학 서술형 대비",
"과학 선행",
"과학 중간고사 대비 과외",
"과학 기말고사 대비 과외",
"과학 시험기간 단기 과외",
"과학 겨울방학 과외",
"과탐 과외",
"수능 과탐 과외",
"통합과학 수능 대비"
]
}
},
"사회": {
"name": "사회",
"slug": "social",
"badge": "통합사회·한국사·사탐 고득점",
"summary": "방대한 암기량의 흐름 구조화 및 도표·사료 분석, 만점 서술형 가이드",
"coreKeywords": [
"사회 과외",
"사회 내신 과외",
"사회 내신 대비",
"통합사회 과외",
"한국사 과외",
"사회 내신",
"통합사회 내신",
"한국사 내신",
"사회 1:1 과외",
"사회 과외 선생님"
],
"studentKeywords": {
"시험 정보": [
"사회 기출",
"사회 기출문제",
"사회 족보",
"사회 시험범위",
"사회 시험 난이도",
"사회 중간고사",
"사회 기말고사",
"사회 서술형",
"사회 시험 유형",
"사회 출제 경향",
"사회 평균",
"사회 등급컷",
"사회 시험 후기",
"사회 부교재",
"사회 교과서"
],
"과목별": [
"통합사회 기출",
"통합사회 시험범위",
"통합사회 시험 난이도",
"통합사회 서술형",
"통합사회 교과서",
"한국사 기출",
"한국사 시험범위",
"한국사 시험 난이도",
"한국사 서술형",
"사회문화 기출",
"생활과 윤리 기출",
"세계사 기출",
"한국지리 기출",
"사회 선택과목",
"사회 선택과목 추천"
],
"공부·수행": [
"사회 1등급",
"사회 공부법",
"사회 내신 공부법",
"사회 암기법",
"한국사 암기법",
"통합사회 암기",
"사회 벼락치기",
"사회 문제집 추천",
"사회 프린트",
"사회 필기",
"사회 수행평가",
"사회 발표 수행평가",
"사회 보고서 수행평가",
"사회 세특 주제",
"사회 성취도 분포"
]
},
"parentKeywords": {
"과외·학원 찾기": [
"사회 과외 추천",
"사회 과외 선생님 추천",
"사회 과외 구하기",
"사회 전문 과외",
"사회 방문 과외",
"사회 화상 과외",
"사회 개인과외",
"사회 과외 비용",
"사회 과외비",
"사회 과외 후기",
"사회 과외 상담",
"사회 학원",
"사회 내신 학원",
"사회 과외 vs 학원",
"사회 단기 과외"
],
"과목·학년": [
"통합사회1 과외",
"통합사회2 과외",
"통합사회 내신 대비",
"한국사 내신 대비",
"사회문화 과외",
"사회와 문화 과외",
"생활과 윤리 과외",
"현대사회와 윤리 과외",
"윤리와 사상 과외",
"세계사 과외",
"한국지리 과외",
"정치와 법 과외",
"경제 과외",
"1학년 사회 과외",
"2학년 사회 과외"
],
"성적·시기": [
"사회 내신 올리기",
"사회 등급 올리기",
"사회 기초 과외",
"사회 노베이스 과외",
"사회 하위권 과외",
"사회 상위권 과외",
"사회 서술형 대비",
"사회 중간고사 대비 과외",
"사회 기말고사 대비 과외",
"사회 시험기간 단기 과외",
"사회 겨울방학 과외",
"사탐 과외",
"사탐 학원",
"수능 사탐 과외",
"통합사회 수능 대비"
]
}
},
"수행평가": {
"name": "수행평가",
"slug": "performance-eval",
"badge": "세특·생기부·보고서 1:1 코칭",
"summary": "과목별 탐구보고서, 발표 PPT, 서술형 논술 및 학생부 세특 차별화 컨설팅",
"coreKeywords": [
"수행평가",
"수행평가 대비",
"수행평가 과외",
"세특 관리",
"생기부 관리",
"수행평가 대비 과외",
"수행평가 일정",
"수행평가 비율",
"세특",
"생기부"
],
"studentKeywords": {
"기본 정보": [
"수행평가 기간",
"수행평가 공지",
"수행평가 계획",
"수행평가 종류",
"수행평가 배점",
"수행평가 기준",
"수행평가 채점 기준",
"수행평가 난이도",
"수행평가 감점",
"수행평가 만점",
"수행평가 미제출",
"수행평가 재시험",
"수행평가 몰리는 기간",
"시험기간 수행평가",
"수행평가 꿀팁"
],
"과목별": [
"수학 수행평가",
"영어 수행평가",
"국어 수행평가",
"과학 수행평가",
"사회 수행평가",
"한국사 수행평가",
"통합과학 수행평가",
"통합사회 수행평가",
"과학탐구실험 수행평가",
"체육 수행평가",
"음악 수행평가",
"미술 수행평가",
"정보 수행평가",
"기술가정 수행평가",
"제2외국어 수행평가"
],
"유형·주제": [
"발표 수행평가",
"보고서 수행평가",
"서술형 수행평가",
"논술형 수행평가",
"글쓰기 수행평가",
"독서 수행평가",
"토론 수행평가",
"조별 수행평가",
"PPT 수행평가",
"탐구 보고서",
"실험 보고서",
"수행평가 주제 추천",
"수행평가 발표 주제",
"수행평가 보고서 양식",
"세특 주제"
]
},
"parentKeywords": {
"대비·도움": [
"수행평가 코칭",
"수행평가 도움",
"수행평가 준비 방법",
"수행평가 일정 관리",
"수행평가 중간고사 병행",
"수행평가 관리",
"수행평가 컨설팅",
"수학 수행평가 대비",
"영어 수행평가 대비",
"국어 수행평가 대비",
"과학 수행평가 대비",
"사회 수행평가 대비",
"탐구 보고서 지도",
"수행평가 글쓰기 지도",
"수행평가 발표 지도"
],
"반영·성적": [
"수행평가 반영 비율",
"수행평가 내신 반영",
"수행평가 지필 비율",
"수행평가 성적 확인",
"수행평가 이의신청",
"수행평가 등급 영향",
"수행평가 감점 기준",
"수행평가 평가 계획서",
"수행평가 인정점",
"수행평가 결석",
"1학년 수행평가",
"2학년 수행평가",
"3학년 수행평가",
"1학기 수행평가",
"2학기 수행평가"
],
"세특·입시": [
"세특 관리 과외",
"세특 주제 추천",
"세특 컨설팅",
"과목별 세특",
"수학 세특",
"영어 세특",
"국어 세특",
"과학 세특",
"사회 세특",
"생기부 관리 과외",
"생기부 컨설팅",
"생기부 관리 방법",
"학생부종합 수행평가",
"수행평가 세특 연계",
"학생부종합 준비"
]
}
}
}
+656
View File
@@ -0,0 +1,656 @@
{
"total": 46,
"regionName": "울산",
"defaultSido": "울산광역시",
"keywordPrefix": "울산 ",
"sampleKeyword": "울산 남구 옥동 수학과외",
"uniqueDongCount": 46,
"list": [
{
"fullName": "울산광역시 남구 달동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "달동"
},
{
"fullName": "울산광역시 남구 대현동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "대현동"
},
{
"fullName": "울산광역시 남구 무거동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "무거동"
},
{
"fullName": "울산광역시 남구 삼산동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "삼산동"
},
{
"fullName": "울산광역시 남구 선암동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "선암동"
},
{
"fullName": "울산광역시 남구 수암동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "수암동"
},
{
"fullName": "울산광역시 남구 신정동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "신정동"
},
{
"fullName": "울산광역시 남구 야음동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "야음동"
},
{
"fullName": "울산광역시 남구 옥동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "옥동"
},
{
"fullName": "울산광역시 동구 방어동",
"sido": "울산광역시",
"sigungu": "동구",
"dong": "방어동"
},
{
"fullName": "울산광역시 동구 서부동",
"sido": "울산광역시",
"sigungu": "동구",
"dong": "서부동"
},
{
"fullName": "울산광역시 동구 일산동",
"sido": "울산광역시",
"sigungu": "동구",
"dong": "일산동"
},
{
"fullName": "울산광역시 동구 전하동",
"sido": "울산광역시",
"sigungu": "동구",
"dong": "전하동"
},
{
"fullName": "울산광역시 동구 화정동",
"sido": "울산광역시",
"sigungu": "동구",
"dong": "화정동"
},
{
"fullName": "울산광역시 북구 달천동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "달천동"
},
{
"fullName": "울산광역시 북구 매곡동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "매곡동"
},
{
"fullName": "울산광역시 북구 산하동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "산하동"
},
{
"fullName": "울산광역시 북구 송정동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "송정동"
},
{
"fullName": "울산광역시 북구 양정동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "양정동"
},
{
"fullName": "울산광역시 북구 연암동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "연암동"
},
{
"fullName": "울산광역시 북구 염포동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "염포동"
},
{
"fullName": "울산광역시 북구 중산동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "중산동"
},
{
"fullName": "울산광역시 북구 천곡동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "천곡동"
},
{
"fullName": "울산광역시 북구 호계동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "호계동"
},
{
"fullName": "울산광역시 북구 화봉동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "화봉동"
},
{
"fullName": "울산광역시 북구 효문동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "효문동"
},
{
"fullName": "울산광역시 울주군 범서읍 구영리",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "구영리"
},
{
"fullName": "울산광역시 울주군 범서읍",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "범서읍"
},
{
"fullName": "울산광역시 울주군 삼남읍",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "삼남읍"
},
{
"fullName": "울산광역시 울주군 상북면",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "상북면"
},
{
"fullName": "울산광역시 울주군 언양읍",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "언양읍"
},
{
"fullName": "울산광역시 울주군 온산읍",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "온산읍"
},
{
"fullName": "울산광역시 울주군 온양읍",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "온양읍"
},
{
"fullName": "울산광역시 울주군 웅촌면",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "웅촌면"
},
{
"fullName": "울산광역시 울주군 범서읍 천상리",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "천상리"
},
{
"fullName": "울산광역시 중구 다운동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "다운동"
},
{
"fullName": "울산광역시 중구 반구동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "반구동"
},
{
"fullName": "울산광역시 중구 병영동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "병영동"
},
{
"fullName": "울산광역시 중구 복산동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "복산동"
},
{
"fullName": "울산광역시 중구 성남동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "성남동"
},
{
"fullName": "울산광역시 중구 성안동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "성안동"
},
{
"fullName": "울산광역시 중구 약사동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "약사동"
},
{
"fullName": "울산광역시 중구 우정동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "우정동"
},
{
"fullName": "울산광역시 중구 유곡동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "유곡동"
},
{
"fullName": "울산광역시 중구 태화동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "태화동"
},
{
"fullName": "울산광역시 중구 학성동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "학성동"
}
],
"dongMap": {
"달동": [
{
"fullName": "울산광역시 남구 달동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "달동"
}
],
"대현동": [
{
"fullName": "울산광역시 남구 대현동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "대현동"
}
],
"무거동": [
{
"fullName": "울산광역시 남구 무거동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "무거동"
}
],
"삼산동": [
{
"fullName": "울산광역시 남구 삼산동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "삼산동"
}
],
"선암동": [
{
"fullName": "울산광역시 남구 선암동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "선암동"
}
],
"수암동": [
{
"fullName": "울산광역시 남구 수암동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "수암동"
}
],
"신정동": [
{
"fullName": "울산광역시 남구 신정동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "신정동"
}
],
"야음동": [
{
"fullName": "울산광역시 남구 야음동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "야음동"
}
],
"옥동": [
{
"fullName": "울산광역시 남구 옥동",
"sido": "울산광역시",
"sigungu": "남구",
"dong": "옥동"
}
],
"방어동": [
{
"fullName": "울산광역시 동구 방어동",
"sido": "울산광역시",
"sigungu": "동구",
"dong": "방어동"
}
],
"서부동": [
{
"fullName": "울산광역시 동구 서부동",
"sido": "울산광역시",
"sigungu": "동구",
"dong": "서부동"
}
],
"일산동": [
{
"fullName": "울산광역시 동구 일산동",
"sido": "울산광역시",
"sigungu": "동구",
"dong": "일산동"
}
],
"전하동": [
{
"fullName": "울산광역시 동구 전하동",
"sido": "울산광역시",
"sigungu": "동구",
"dong": "전하동"
}
],
"화정동": [
{
"fullName": "울산광역시 동구 화정동",
"sido": "울산광역시",
"sigungu": "동구",
"dong": "화정동"
}
],
"달천동": [
{
"fullName": "울산광역시 북구 달천동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "달천동"
}
],
"매곡동": [
{
"fullName": "울산광역시 북구 매곡동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "매곡동"
}
],
"산하동": [
{
"fullName": "울산광역시 북구 산하동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "산하동"
}
],
"송정동": [
{
"fullName": "울산광역시 북구 송정동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "송정동"
}
],
"양정동": [
{
"fullName": "울산광역시 북구 양정동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "양정동"
}
],
"연암동": [
{
"fullName": "울산광역시 북구 연암동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "연암동"
}
],
"염포동": [
{
"fullName": "울산광역시 북구 염포동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "염포동"
}
],
"중산동": [
{
"fullName": "울산광역시 북구 중산동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "중산동"
}
],
"천곡동": [
{
"fullName": "울산광역시 북구 천곡동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "천곡동"
}
],
"호계동": [
{
"fullName": "울산광역시 북구 호계동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "호계동"
}
],
"화봉동": [
{
"fullName": "울산광역시 북구 화봉동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "화봉동"
}
],
"효문동": [
{
"fullName": "울산광역시 북구 효문동",
"sido": "울산광역시",
"sigungu": "북구",
"dong": "효문동"
}
],
"구영리": [
{
"fullName": "울산광역시 울주군 범서읍 구영리",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "구영리"
}
],
"범서읍": [
{
"fullName": "울산광역시 울주군 범서읍",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "범서읍"
}
],
"삼남읍": [
{
"fullName": "울산광역시 울주군 삼남읍",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "삼남읍"
}
],
"상북면": [
{
"fullName": "울산광역시 울주군 상북면",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "상북면"
}
],
"언양읍": [
{
"fullName": "울산광역시 울주군 언양읍",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "언양읍"
}
],
"온산읍": [
{
"fullName": "울산광역시 울주군 온산읍",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "온산읍"
}
],
"온양읍": [
{
"fullName": "울산광역시 울주군 온양읍",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "온양읍"
}
],
"웅촌면": [
{
"fullName": "울산광역시 울주군 웅촌면",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "웅촌면"
}
],
"천상리": [
{
"fullName": "울산광역시 울주군 범서읍 천상리",
"sido": "울산광역시",
"sigungu": "울주군",
"dong": "천상리"
}
],
"다운동": [
{
"fullName": "울산광역시 중구 다운동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "다운동"
}
],
"반구동": [
{
"fullName": "울산광역시 중구 반구동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "반구동"
}
],
"병영동": [
{
"fullName": "울산광역시 중구 병영동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "병영동"
}
],
"복산동": [
{
"fullName": "울산광역시 중구 복산동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "복산동"
}
],
"성남동": [
{
"fullName": "울산광역시 중구 성남동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "성남동"
}
],
"성안동": [
{
"fullName": "울산광역시 중구 성안동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "성안동"
}
],
"약사동": [
{
"fullName": "울산광역시 중구 약사동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "약사동"
}
],
"우정동": [
{
"fullName": "울산광역시 중구 우정동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "우정동"
}
],
"유곡동": [
{
"fullName": "울산광역시 중구 유곡동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "유곡동"
}
],
"태화동": [
{
"fullName": "울산광역시 중구 태화동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "태화동"
}
],
"학성동": [
{
"fullName": "울산광역시 중구 학성동",
"sido": "울산광역시",
"sigungu": "중구",
"dong": "학성동"
}
]
}
}
File diff suppressed because it is too large Load Diff
+58
View File
@@ -0,0 +1,58 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
compatibilityDate: '2024-11-01',
devtools: { enabled: false },
future: {
compatibilityVersion: 3
},
// SSR (Server-Side Rendering) 모드 강제 - 네이버 Yeti 봇 100% 대응
ssr: true,
// Windows 경로 구분자 대응 및 Nitro 번들링 안정화
nitro: {
externals: {
inline: [/[\\/]node_modules[\\/]nuxt[\\/]dist[\\/]/]
}
},
runtimeConfig: {
discordWebhookUrl: process.env.DISCORD_WEBHOOK_URL || 'https://discordapp.com/api/webhooks/1557204310369116210/9J4y96kmSbYNGtw5OxRgIz7InWcM8o3f8UX0Ad71-IyofwdS7tWmXkF7dj457-I8Ypiu',
public: {
siteName: '쌤인증',
siteDomain: process.env.SITE_DOMAIN || 'https://soohyun.xyz',
naverVerificationKey: process.env.NAVER_VERIFICATION_KEY || 'd40ee8cd61dab827dcbd7080e54b095339c44222'
}
},
app: {
head: {
htmlAttrs: {
lang: 'ko'
},
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
{ rel: 'shortcut icon', href: '/favicon.ico' },
{ rel: 'icon', type: 'image/png', sizes: '32x32', href: '/favicon-32x32.png' },
{ rel: 'icon', type: 'image/png', sizes: '16x16', href: '/favicon-16x16.png' },
{ rel: 'apple-touch-icon', sizes: '180x180', href: '/apple-touch-icon.png' },
{ rel: 'preconnect', href: 'https://fonts.googleapis.com' },
{ rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' },
{ rel: 'stylesheet', href: 'https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css' },
{ rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css' },
{ rel: 'stylesheet', href: '/css/theme.css' }
],
script: [
{ src: 'https://cdn.tailwindcss.com' }
],
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1.0, maximum-scale=5.0, minimum-scale=1.0' },
{ name: 'format-detection', content: 'telephone=no' },
// 네이버 서치어드바이저 사이트 소유확인 키 메타태그
{ name: 'naver-site-verification', content: process.env.NAVER_VERIFICATION_KEY || 'd40ee8cd61dab827dcbd7080e54b095339c44222' }
]
}
}
})
+9292
View File
File diff suppressed because it is too large Load Diff
+17
View File
@@ -0,0 +1,17 @@
{
"name": "eduroyal-site1",
"type": "module",
"private": true,
"scripts": {
"build": "nuxt build",
"dev": "nuxt dev --port 3011",
"generate": "nuxt generate",
"preview": "nuxt preview --port 3011",
"postinstall": "nuxt prepare"
},
"dependencies": {
"nuxt": "^4.5.2",
"vue": "^3.5.43",
"vue-router": "^5.3.1"
}
}
+141
View File
@@ -0,0 +1,141 @@
<template>
<div class="landing-page-wrap">
<!-- 1. 광고 랜딩 전용 지역 식별 바 (외부 이탈 링크 없음) -->
<div class="ad-location-bar">
<span class="loc-badge-tag">[지역센터]</span>
<span class="loc-text">{{ parsed.shortRegionName }} ({{ parsed.sigungu }}) 관내 초·중·고 전담</span>
<span class="loc-tag">1:1 맞춤 배정 센터</span>
</div>
<!-- 2. 상단 히어로 배너 (Header 제거, H1 태그 포함) -->
<HeroBanner
:region="parsed.region"
:shortRegionName="parsed.shortRegionName"
:grade="parsed.grade"
:subjectName="parsed.subjectName"
/>
<!-- 3. 실시간 성과 지표 4선 -->
<QuickMetrics :regionDong="parsed.dong" />
<!-- 4. 인근 학교별 내신 기출 정밀 분석 -->
<NearbySchools
:regionDong="parsed.dong"
:grade="parsed.grade"
:subjectName="parsed.subjectName"
/>
<!-- 5. 과목별 상세 커리큘럼 & 1등급 도약 솔루션 -->
<SubjectMastery
:regionDong="parsed.dong"
:grade="parsed.grade"
:curriculum="curriculum"
/>
<!-- 6. 1:1 강사진 4단계 검증 프로세스 -->
<TeacherVerification />
<!-- 7. 메타인지 스터디 플래너 & 밀착 코칭 시스템 -->
<CoachingSystem />
<!-- 8. 실제 성적 향상 수기 (해당 학년/과목 100% 매칭) -->
<SuccessStories
:regionDong="parsed.dong"
:grade="parsed.grade"
:subjectName="parsed.subjectName"
/>
<!-- 9. 수업 진행 4단계 절차 안내 -->
<ProcessGuide />
<!-- 10. 자주 묻는 질문 (FAQ) -->
<FaqAccordion
:regionDong="parsed.dong"
:grade="parsed.grade"
:subjectName="parsed.subjectName"
/>
<!-- 11. 네이버 5개 멀티 이미지 매칭용 핵심 과외 프로그램 빠른 보기 -->
<FastConsultFocus
:regionDong="parsed.dong"
:grade="parsed.grade"
:subjectName="parsed.subjectName"
/>
<!-- 웹 광고 단일 목적: 해당 학년과 과목이 기본 선택된 무료 상담 신청 폼 -->
<ConsultForm
:regionName="parsed.shortRegionName"
:defaultGrade="parsed.grade"
:defaultSubject="parsed.subjectName"
/>
</div>
</template>
<script setup>
import { useRoute } from 'vue-router'
import { parseRouteSlug, getCurriculumBySubject, getAllSubjectsList, getPopularRegions } from '~/utils/dataHelper'
import { generateSeoMeta } from '~/utils/seoHelper'
const route = useRoute()
const config = useRuntimeConfig()
// URL 파라미터 파싱
const slug = route.params.slug
const parsed = parseRouteSlug(slug)
// 커리큘럼 데이터 로드
const curriculum = getCurriculumBySubject(parsed.subjectKey)
const allSubjects = getAllSubjectsList()
const popularRegions = getPopularRegions(12)
// 네이버 Yeti 봇 100% 대응 SEO 메타태그 설정
const seo = generateSeoMeta(
parsed,
config.public.siteName,
config.public.siteDomain
)
useHead({
title: seo.title,
meta: seo.meta,
link: seo.link,
script: seo.script
})
</script>
<style scoped>
.landing-page-wrap {
width: 100%;
overflow-x: hidden;
}
.ad-location-bar {
max-width: 1080px;
margin: 10px auto;
padding: 8px 16px;
font-size: clamp(0.78rem, 2vw, 0.88rem);
color: #334155;
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
}
.loc-pin {
font-size: 1rem;
}
.loc-text {
font-weight: 700;
color: var(--primary-color, #1e3a8a);
}
.loc-tag {
font-size: 0.75rem;
font-weight: 800;
background: var(--badge-bg, rgba(30, 58, 138, 0.08));
color: var(--primary-color, #1e3a8a);
padding: 2px 8px;
border-radius: 4px;
}
</style>
+568
View File
@@ -0,0 +1,568 @@
<template>
<div class="landing-container bg-[#F8FAFC] text-slate-800 antialiased relative pb-24 md:pb-12 min-h-screen w-full">
<!-- Header -->
<header class="bg-white border-b border-slate-200 sticky top-0 z-40 shadow-sm w-full">
<div class="max-w-6xl mx-auto px-4 sm:px-6 py-3.5 flex items-center justify-between">
<div class="flex items-center space-x-2">
<div class="w-9 h-9 rounded-xl bg-slate-900 flex items-center justify-center text-amber-400 font-extrabold text-lg shadow-sm">
A
</div>
<div>
<span class="font-extrabold text-xl sm:text-2xl tracking-tight text-slate-950">{{ siteName }}</span>
<span class="text-[10px] font-bold text-red-600 bg-red-50 px-2 py-0.5 rounded-full ml-1.5 border border-red-200">초격차 1등급</span>
</div>
</div>
<div class="flex items-center space-x-4">
<a href="tel:010-5961-5807" class="hidden sm:flex items-center gap-1.5 text-sm font-semibold text-slate-600 hover:text-red-600 transition">
<i class="fa-solid fa-phone text-red-600"></i>
<span>010-5961-5807</span>
</a>
<a href="#leadFormSection" class="bg-slate-950 hover:bg-slate-800 text-white text-xs sm:text-sm font-bold px-5 py-2.5 rounded-full transition shadow-md flex items-center gap-1.5 border border-slate-800">
<span>마스터 플랜 신청</span>
<i class="fa-solid fa-arrow-right text-[11px] text-amber-400"></i>
</a>
</div>
</div>
</header>
<!-- 메인 컨텐츠 (좌우 꽉 찬 와이드) -->
<main class="w-full bg-[#F8FAFC] min-h-screen pb-20">
<!-- 히어로 섹션 (매트 다크 차콜 & 크림슨 레드/골드 풀와이드) -->
<section class="w-full bg-gradient-to-b from-[#0F172A] via-[#162033] to-[#1E293B] text-white px-4 sm:px-6 pt-12 pb-20 rounded-b-[2.5rem] relative overflow-hidden text-center shadow-lg">
<div class="absolute -right-24 -top-24 w-96 h-96 bg-red-500/20 rounded-full blur-3xl pointer-events-none"></div>
<div class="absolute -left-24 bottom-0 w-96 h-96 bg-amber-500/20 rounded-full blur-3xl pointer-events-none"></div>
<div class="max-w-4xl mx-auto relative z-10">
<div class="inline-flex items-center gap-2 bg-white/10 backdrop-blur-md border border-white/20 px-4 py-1.5 rounded-full text-xs sm:text-sm font-medium text-slate-200 mb-5 shadow-sm">
<span class="w-2.5 h-2.5 rounded-full bg-red-500 animate-ping"></span>
<span>의치한약수 & 자사·특목고 1등급 마스터 시스템</span>
</div>
<h1 class="text-2xl sm:text-4xl md:text-5xl font-extrabold leading-snug sm:leading-tight tracking-tight text-white mb-4">
의대·치대·서울대 및 특목자사고 목표<br class="hidden sm:inline">
<span class="text-amber-400 underline decoration-wavy decoration-amber-500">전과목 올 1등급 초격차 마스터 플랜</span> 무료 정밀 심층 진단
</h1>
<p class="text-xs sm:text-base text-slate-300 font-normal max-w-2xl mx-auto leading-relaxed mb-8">
상위 1%의 벽을 넘는 고난도 킬러 문항 해결력과 완벽한 내신 서술형 방어로 최상위권 합격을 완성합니다.
</p>
<!-- 지표 카운터 -->
<div class="grid grid-cols-3 gap-3 bg-white/10 backdrop-blur-md border border-white/20 rounded-2xl p-4 sm:p-5 text-center max-w-xl mx-auto mb-6 shadow-inner">
<div>
<div class="text-[11px] sm:text-xs text-slate-400">자사·특목 학생비율</div>
<div class="font-extrabold text-base sm:text-2xl text-white mt-0.5">88.5<span class="text-xs sm:text-sm font-normal">%</span></div>
</div>
<div class="border-x border-white/20">
<div class="text-[11px] sm:text-xs text-slate-400">1등급 유지율</div>
<div class="font-extrabold text-base sm:text-2xl text-amber-400 mt-0.5">97.4<span class="text-xs sm:text-sm font-normal">%</span></div>
</div>
<div>
<div class="text-[11px] sm:text-xs text-slate-400">킬러 정답률</div>
<div class="font-extrabold text-base sm:text-2xl text-white mt-0.5">92.1<span class="text-xs sm:text-sm font-normal">%</span></div>
</div>
</div>
<!-- 실시간 롤링 알림 -->
<div class="bg-black/40 backdrop-blur-md rounded-full px-4 py-2 flex items-center justify-center gap-2.5 text-xs text-slate-300 border border-white/15 mx-auto max-w-md shadow-md">
<span class="bg-red-600 text-white text-[10px] font-bold px-2 py-0.5 rounded-full">실시간</span>
<span class="truncate font-medium transition-opacity duration-300">{{ currentNotice }}</span>
</div>
</div>
</section>
<!-- 리드 수집 폼 섹션 (상단 카드 오버랩) -->
<section id="leadFormSection" class="px-4 sm:px-6 -mt-10 relative z-20 max-w-3xl mx-auto">
<div class="bg-white rounded-3xl shadow-2xl border border-slate-200/80 p-6 sm:p-8 transition-all">
<header class="text-center mb-6 pb-4 border-b border-slate-100">
<span class="inline-block px-3 py-1 rounded-full text-xs font-bold bg-red-100 text-red-800 mb-2">
선착순 30명 초격차 킬러 분석서 무료
</span>
<h2 class="text-xl sm:text-2xl font-bold text-slate-900">
최상위권 목표 과목을 선택하세요!
</h2>
<p class="text-xs sm:text-sm text-slate-500 mt-1">
학생의 취약 킬러 유형을 분석하여 1등급 전문 강사를 1:1 매칭해 드립니다.
</p>
</header>
<form @submit.prevent="handleSubmit" class="space-y-5">
<!-- 학년 & 취약 과목 -->
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div>
<label for="studentGrade" class="block text-xs sm:text-sm font-bold text-slate-700 mb-1.5">
학년 선택 <span class="text-red-600">*</span>
</label>
<select id="studentGrade" v-model="formData.grade" required class="w-full bg-slate-50 border border-slate-300 text-slate-800 text-xs sm:text-sm rounded-xl focus:ring-2 focus:ring-slate-900 focus:border-slate-900 p-3 outline-none font-medium transition">
<option value="" disabled>학년 선택</option>
<optgroup label="고등부 (의대·수능·자사고 1등급)">
<option value="고등학교 1학년">고등학교 1학년 (자사고 내신 1등급 셋업)</option>
<option value="고등학교 2학년">고등학교 2학년 (과탐·수학 킬러 완벽 정복)</option>
<option value="고등학교 3학년/N수">고등학교 3학년 / N수 (의치약대 수능 파이널)</option>
</optgroup>
<optgroup label="중등부 (특목·자사고 대비)">
<option value="중학교 1~2학년">중학교 1~2학년 (수학·과학 심화 선행)</option>
<option value="중학교 3학년">중학교 3학년 (특목고·영재고 실전 대비)</option>
</optgroup>
</select>
</div>
<div>
<label for="weakSubject" class="block text-xs sm:text-sm font-bold text-slate-700 mb-1.5">
집중 과목 <span class="text-red-600">*</span>
</label>
<select id="weakSubject" v-model="formData.subject" required class="w-full bg-slate-50 border border-slate-300 text-slate-800 text-xs sm:text-sm rounded-xl focus:ring-2 focus:ring-slate-900 focus:border-slate-900 p-3 outline-none font-medium transition">
<option value="" disabled>과목 선택</option>
<option value="수학">수학 (미적분/기하 킬러 문항)</option>
<option value="과학">과학 (물리·화학·생명 킬러 도표)</option>
<option value="영어">영어 (고난도 빈칸·순서배열 1등급)</option>
<option value="국어">국어 (수능 고난도 비문학 기술·경제)</option>
<option value="전과목/초격차">전과목 올 1등급 입시 마스터</option>
</select>
</div>
</div>
<!-- 빠른 과목 픽 -->
<div>
<div class="text-xs font-semibold text-slate-500 mb-2 flex justify-between items-center">
<span>빠른 과목 픽 (PICK)</span>
<span class="text-xs text-red-600 font-semibold">터치 시 자동 선택</span>
</div>
<div class="grid grid-cols-5 gap-2 text-center">
<button
v-for="subj in subjects"
:key="subj.name"
type="button"
@click="formData.subject = subj.name"
:class="[
'py-2 px-1 rounded-xl text-xs sm:text-sm font-bold transition shadow-sm',
formData.subject === subj.name
? 'border-2 border-red-600 bg-red-50 text-red-800 ring-2 ring-red-300/50'
: 'border border-slate-200 text-slate-700 hover:border-red-400 bg-white'
]"
>
<span>{{ subj.label }}</span>
<span class="block text-[10px] font-normal" :class="formData.subject === subj.name ? 'text-red-700 font-semibold' : 'text-slate-400'">
{{ subj.badge }}
</span>
</button>
</div>
</div>
<!-- 공부 고민 체크박스 -->
<div>
<label class="block text-xs sm:text-sm font-bold text-slate-700 mb-2">
현재 가장 큰 고민은 무엇인가요? (복수 선택 가능)
</label>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-2.5 text-xs sm:text-sm">
<label v-for="c in concernOptions" :key="c" class="flex items-center gap-2.5 p-3 bg-slate-50 border border-slate-200 rounded-lg cursor-pointer hover:bg-red-50/50 transition">
<input type="checkbox" :value="c" v-model="formData.concerns" class="w-4 h-4 text-red-600 rounded border-slate-300 focus:ring-red-500">
<span class="text-slate-700 text-xs sm:text-sm font-medium">{{ c }}</span>
</label>
</div>
</div>
<!-- 거주 지역 / 학교 -->
<div>
<label for="regionInput" class="block text-xs sm:text-sm font-bold text-slate-700 mb-1.5">
학교명 및 목표 학과 <span class="text-slate-400 font-normal text-xs">(최상위권 전담 배치)</span>
</label>
<input type="text" id="regionInput" v-model="formData.region" placeholder="예: 서울 반포동 / 세화고 (목표: 의예과)" class="w-full bg-slate-50 border border-slate-300 text-slate-800 text-xs sm:text-sm rounded-xl focus:ring-2 focus:ring-slate-900 focus:border-slate-900 p-3 outline-none placeholder:text-slate-400 transition">
</div>
<!-- 학부모 연락처 -->
<div>
<label for="parentPhone" class="block text-xs sm:text-sm font-bold text-slate-700 mb-1.5">
학부모 연락처 <span class="text-red-600">*</span>
<span class="text-slate-400 font-normal text-xs">(킬러 분석표 발송용)</span>
</label>
<div class="relative">
<input
type="tel"
id="parentPhone"
v-model="formData.phone"
@input="formatPhone"
required
placeholder="010-0000-0000"
maxlength="13"
class="w-full bg-slate-50 border border-slate-300 text-slate-900 text-base font-semibold rounded-xl focus:ring-2 focus:ring-slate-900 focus:border-slate-900 p-3.5 pl-11 outline-none tracking-wider"
>
<i class="fa-solid fa-mobile-screen-button absolute left-4 top-4 text-slate-400 text-base"></i>
</div>
</div>
<!-- 개인정보 동의 -->
<div class="flex items-center gap-2 text-xs text-slate-500 pt-1">
<input type="checkbox" id="privacyAgree" v-model="formData.privacy" required class="w-4 h-4 text-red-600 rounded border-slate-300 focus:ring-red-500">
<label for="privacyAgree" class="cursor-pointer">
[필수] 개인정보 수집 및 상담 안내 제공에 동의합니다.
</label>
</div>
<!-- 제출 버튼 -->
<button
type="submit"
:disabled="isSubmitting"
class="w-full bg-gradient-to-r from-slate-950 via-slate-900 to-red-900 hover:opacity-95 text-white font-extrabold text-base sm:text-lg py-4 px-6 rounded-2xl shadow-xl transition flex items-center justify-center gap-2 disabled:opacity-50 border border-red-500/30"
>
<i class="fa-solid fa-crown text-amber-400 text-lg"></i>
<span>{{ isSubmitting ? '초격차 분석 중...' : '1등급 초격차 마스터 플랜 신청하기' }}</span>
</button>
<div class="text-center text-xs text-slate-400 flex items-center justify-center gap-1.5">
<i class="fa-solid fa-lock text-xs"></i>
<span>입력하신 정보는 상담 및 리포트 제공 목적으로만 안전하게 보관됩니다.</span>
</div>
<!-- 안내 문구 (상담 결과 전달 시 원활 진행 안내) -->
<div class="mt-3 p-3.5 bg-red-50/90 border border-red-200/90 rounded-xl flex items-start gap-2.5 text-xs text-red-950 leading-relaxed shadow-sm">
<i class="fa-solid fa-circle-info text-red-600 mt-0.5 text-sm shrink-0"></i>
<div>
<strong class="font-bold text-red-950 block mb-0.5">📢 원활한 상담 진행 안내</strong>
<span>상담 신청 후 안내받으신 <strong>상담결과를 매니저에게 전달해 주시면</strong> 더욱 원활하고 신속한 맞춤 강사 배정과 심층 상담이 진행됩니다. (직통 문의: <a href="tel:010-5961-5807" class="font-extrabold text-red-900 underline hover:text-red-700">010-5961-5807</a>)</span>
</div>
</div>
</form>
<!-- 완료 메시지 -->
<div v-if="submitSuccess" id="submitResultBox" class="mt-5 p-5 bg-emerald-50 border border-emerald-300 rounded-2xl text-emerald-900 text-xs sm:text-sm">
<div class="flex items-center gap-2 font-bold text-sm sm:text-base mb-1.5 text-emerald-800">
<i class="fa-solid fa-circle-check text-emerald-600 text-lg"></i>
<span>마스터 플랜 신청이 성공적으로 접수되었습니다!</span>
</div>
<p class="leading-relaxed">
기재해주신 연락처로 <strong>‘최상위권 킬러 문항 심층 분석서’</strong>가 발송되며, 의대·특목고 전담 수석 컨설턴트가 유선으로 심층 솔루션을 안내해 드립니다.
</p>
<div class="mt-3 p-2.5 bg-white/80 rounded-xl border border-emerald-200 text-xs text-emerald-900 flex items-start gap-2">
<i class="fa-solid fa-lightbulb text-emerald-600 mt-0.5 shrink-0"></i>
<span><strong>💡 안내:</strong> 매니저 유선 상담 시 <strong>상담결과를 공유해 주시면</strong> 수준별 맞춤 커리큘럼 설계가 훨씬 원활하게 진행됩니다. (문의: 010-5961-5807)</span>
</div>
</div>
</div>
</section>
<!-- 4대 혜택 섹션 (데스크톱 4열 그리드) -->
<section class="mt-16 px-4 sm:px-6 max-w-6xl mx-auto">
<header class="text-center mb-8">
<span class="text-xs sm:text-sm font-bold text-red-600 tracking-wider uppercase bg-red-100 px-3 py-1 rounded-full">SSAM INJEUNG SYSTEM</span>
<h2 class="text-2xl sm:text-3xl font-extrabold text-slate-900 mt-2">쌤인증 4대 초격차 솔루션</h2>
<p class="text-xs sm:text-sm text-slate-500 mt-1">최상위 1% 도약을 가로막는 마지막 한 문항까지 완벽히 해결합니다.</p>
</header>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
<div class="bg-white p-5 rounded-2xl border border-slate-200/80 shadow-sm hover:border-red-300 hover:shadow-md transition group">
<div class="w-12 h-12 rounded-2xl bg-red-100 text-red-600 flex items-center justify-center text-xl font-bold mb-4 group-hover:scale-110 transition-transform">
<i class="fa-solid fa-bolt"></i>
</div>
<span class="inline-block text-[11px] font-bold text-red-600 bg-red-50 px-2 py-0.5 rounded mb-1.5">혜택 01</span>
<h3 class="font-bold text-slate-900 text-sm sm:text-base">킬러 문항 5단계 해체집</h3>
<p class="text-xs text-slate-500 mt-1.5 leading-relaxed">수능·내신 최고난도 문항의 접근 논리를 도식화</p>
</div>
<div class="bg-white p-5 rounded-2xl border border-slate-200/80 shadow-sm hover:border-amber-300 hover:shadow-md transition group">
<div class="w-12 h-12 rounded-2xl bg-amber-100 text-amber-600 flex items-center justify-center text-xl font-bold mb-4 group-hover:scale-110 transition-transform">
<i class="fa-solid fa-crown"></i>
</div>
<span class="inline-block text-[11px] font-bold text-amber-600 bg-amber-50 px-2 py-0.5 rounded mb-1.5">혜택 02</span>
<h3 class="font-bold text-slate-900 text-sm sm:text-base">의대·자사고 족보 시크릿</h3>
<p class="text-xs text-slate-500 mt-1.5 leading-relaxed">전국 상위 1% 학교들의 기출 변형 킬러 DB 독점 제공</p>
</div>
<div class="bg-white p-5 rounded-2xl border border-slate-200/80 shadow-sm hover:border-slate-400 hover:shadow-md transition group">
<div class="w-12 h-12 rounded-2xl bg-slate-100 text-slate-800 flex items-center justify-center text-xl font-bold mb-4 group-hover:scale-110 transition-transform">
<i class="fa-solid fa-scale-balanced"></i>
</div>
<span class="inline-block text-[10px] font-bold text-slate-800 bg-slate-100 px-2 py-0.5 rounded mb-1.5">혜택 03</span>
<h3 class="font-bold text-slate-900 text-sm sm:text-base">전과목 올1등급 밸런스</h3>
<p class="text-xs text-slate-500 mt-1.5 leading-relaxed">과목별 시간 안배와 취약점 제로화 포트폴리오</p>
</div>
<div class="bg-white p-5 rounded-2xl border border-slate-200/80 shadow-sm hover:border-emerald-300 hover:shadow-md transition group">
<div class="w-12 h-12 rounded-2xl bg-emerald-100 text-emerald-600 flex items-center justify-center text-xl font-bold mb-4 group-hover:scale-110 transition-transform">
<i class="fa-solid fa-award"></i>
</div>
<span class="inline-block text-[11px] font-bold text-emerald-600 bg-emerald-50 px-2 py-0.5 rounded mb-1.5">혜택 04</span>
<h3 class="font-bold text-slate-900 text-sm sm:text-base">최상위 전문 1타 매칭</h3>
<p class="text-xs text-slate-500 mt-1.5 leading-relaxed">의대·최상위권 합격 배출 경력의 검증된 강사만 배치</p>
</div>
</div>
</section>
<!-- 성적 향상 사례 (데스크톱 와이드 2열) -->
<section class="mt-16 px-4 sm:px-6 max-w-6xl mx-auto">
<header class="text-center mb-8">
<span class="text-xs sm:text-sm font-bold text-red-600 tracking-wider bg-red-100 px-3 py-1 rounded-full">TOP 1% RESULTS</span>
<h2 class="text-2xl sm:text-3xl font-extrabold text-slate-900 mt-2">실제 자사고·의대 합격 성과</h2>
<p class="text-xs sm:text-sm text-slate-500 mt-1">쌤인증의 초격차 지도로 1등급을 굳힌 학생들의 실제 결과입니다.</p>
</header>
<div class="grid grid-cols-1 md:grid-cols-2 gap-5 mb-6">
<!-- Case 1 -->
<div class="bg-white p-6 rounded-3xl border border-slate-200 shadow-sm hover:shadow-md transition">
<div class="flex items-center justify-between mb-3">
<div class="flex items-center gap-2">
<span class="bg-red-100 text-red-800 font-bold text-xs px-2.5 py-1 rounded-full">자사고 내신 1.4등급</span>
<span class="font-bold text-sm sm:text-base text-slate-800">반포 자사고 1학년 송OO</span>
</div>
<span class="text-xs text-slate-400">전교 5등 도약</span>
</div>
<div>
<div class="flex justify-between text-xs sm:text-sm mb-1.5 font-semibold">
<span class="text-slate-400">진단 전: 4.2등급 (킬러 문항 전멸)</span>
<span class="text-red-600 font-bold">결과: 1.4등급 (전과목 1등급 진입) 🔥</span>
</div>
<div class="w-full bg-slate-100 rounded-full h-3 overflow-hidden">
<div class="bg-gradient-to-r from-slate-400 to-red-600 h-3 rounded-full" style="width: 96%"></div>
</div>
</div>
<p class="text-xs sm:text-sm text-slate-600 mt-3.5 bg-slate-50 p-3.5 rounded-xl leading-relaxed">
"자사고는 한 문제로 등급이 갈리는데, 킬러 문항 5단계 해체 훈련을 받고 난 후 시험에서 단 한 문제도 틀리지 않았습니다."
</p>
</div>
<!-- Case 2 -->
<div class="bg-white p-6 rounded-3xl border border-slate-200 shadow-sm hover:shadow-md transition">
<div class="flex items-center justify-between mb-3">
<div class="flex items-center gap-2">
<span class="bg-amber-100 text-amber-800 font-bold text-xs px-2.5 py-1 rounded-full">수능 수학 100점</span>
<span class="font-bold text-sm sm:text-base text-slate-800">일산 고3 배OO (의예과 합격)</span>
</div>
<span class="text-xs text-slate-400">수능 백분위 100</span>
</div>
<div>
<div class="flex justify-between text-xs sm:text-sm mb-1.5 font-semibold">
<span class="text-slate-400">모의고사: 84점 (2등급 문턱)</span>
<span class="text-amber-600 font-bold">수능 실전: 100점 만점 달성 ✨</span>
</div>
<div class="w-full bg-slate-100 rounded-full h-3 overflow-hidden">
<div class="bg-gradient-to-r from-slate-400 to-amber-500 h-3 rounded-full" style="width: 100%"></div>
</div>
</div>
<p class="text-xs sm:text-sm text-slate-600 mt-3.5 bg-slate-50 p-3.5 rounded-xl leading-relaxed">
"어떤 신유형 킬러가 나와도 당황하지 않는 조건 해석 메커니즘을 훈련시켜 주신 덕분에 만점을 받았습니다."
</p>
</div>
</div>
<!-- 학부모 리뷰 (2열) -->
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div class="bg-white p-5 rounded-2xl border border-slate-200 shadow-sm text-left">
<div class="text-amber-400 text-sm mb-2">
<i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i>
</div>
<h4 class="font-bold text-sm sm:text-base text-slate-800">반포 아크로리버파크 송OO님</h4>
<p class="text-xs sm:text-sm text-slate-600 mt-1.5 leading-relaxed">"자사고 진학 후 등급 유지가 가장 큰 고민이었는데, 쌤인증 1:1 과외로 확실한 1등급을 굳혔습니다."</p>
</div>
<div class="bg-white p-5 rounded-2xl border border-slate-200 shadow-sm text-left">
<div class="text-amber-400 text-sm mb-2">
<i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i>
</div>
<h4 class="font-bold text-sm sm:text-base text-slate-800">대치 래미안대치팰리스 노OO님</h4>
<p class="text-xs sm:text-sm text-slate-600 mt-1.5 leading-relaxed">"의대 지망 아이에게 필요한 깊이 있는 사고력을 1:1로 지도해 주시는 유일한 과외입니다."</p>
</div>
</div>
</section>
<!-- FAQ 섹션 -->
<section class="mt-16 px-4 sm:px-6 max-w-4xl mx-auto">
<header class="text-center mb-8">
<span class="text-xs sm:text-sm font-bold text-slate-400 tracking-wider">FAQ</span>
<h2 class="text-2xl sm:text-3xl font-extrabold text-slate-900 mt-1">자주 묻는 질문</h2>
<p class="text-xs sm:text-sm text-slate-500 mt-1">궁금하신 내용을 미리 확인해 보세요.</p>
</header>
<div class="space-y-3">
<div v-for="(faq, idx) in faqs" :key="idx" class="border border-slate-200 rounded-2xl overflow-hidden bg-white shadow-sm">
<button @click="faq.open = !faq.open" class="w-full p-4 sm:p-5 text-left text-sm sm:text-base font-bold text-slate-800 flex justify-between items-center hover:bg-slate-50 transition">
<span>{{ faq.q }}</span>
<i class="fa-solid fa-chevron-down text-xs sm:text-sm text-slate-400 transition-transform" :class="{ 'rotate-180': faq.open }"></i>
</button>
<div v-show="faq.open" class="p-4 sm:p-5 pt-0 text-xs sm:text-sm text-slate-600 leading-relaxed border-t border-slate-100 bg-slate-50/50">
{{ faq.a }}
</div>
</div>
</div>
</section>
</main>
<!-- 하단 모바일 고정 CTA 바 -->
<aside class="fixed bottom-0 left-0 right-0 bg-white/95 backdrop-blur-md border-t border-slate-200 p-3 sm:p-4 z-40 shadow-2xl">
<div class="max-w-4xl mx-auto flex items-center gap-3">
<a href="tel:010-5961-5807" class="flex flex-col items-center justify-center px-4 py-2.5 bg-slate-100 hover:bg-slate-200 text-slate-800 rounded-xl text-xs font-bold shrink-0 transition" title="전화상담">
<i class="fa-solid fa-phone text-red-600 text-sm mb-0.5"></i>
<span>010-5961-5807</span>
</a>
<a href="#leadFormSection" class="flex-1 bg-gradient-to-r from-slate-950 via-slate-900 to-red-900 hover:opacity-95 text-white font-extrabold text-sm sm:text-base py-3 sm:py-3.5 px-4 rounded-xl shadow-lg transition flex items-center justify-center gap-2 border border-red-500/30">
<i class="fa-solid fa-crown text-amber-400 text-xs sm:text-sm"></i>
<span>지금 1등급 초격차 플랜 신청하기</span>
</a>
</div>
</aside>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue'
const config = useRuntimeConfig()
const siteName = config.public.siteName || '쌤인증'
const siteDomain = config.public.siteDomain || 'https://soohyun.xyz'
const isSubmitting = ref(false)
const submitSuccess = ref(false)
const rollingMessages = [
"울산 남구 옥동 고3 의대 정시 수능 미적분 1등급 매칭 접수 (방금 전)",
"울산 중구 유곡동 고2 수능 국어 킬러 문항 대비 신청 완료 (2분 전)",
"울산 남구 삼산동 중3 자사고·과고 대비 수학 1:1 마스터 (3분 전)",
"울산 북구 송정동 고1 내신 1등급 취약점 집중 클리닉 (5분 전)",
"울산 울주군 구영리 고2 과학탐구 심화 개념 마스터 신청 (7분 전)"
]
const currentNotice = ref(rollingMessages[0])
let rollingIdx = 0
onMounted(() => {
setInterval(() => {
rollingIdx = (rollingIdx + 1) % rollingMessages.length
currentNotice.value = rollingMessages[rollingIdx]
}, 3500)
})
const subjects = [
{ name: '수학', label: '수학', badge: '인기' },
{ name: '과학', label: '과학', badge: '추천' },
{ name: '영어', label: '영어', badge: 'PICK' },
{ name: '국어', label: '국어', badge: 'PICK' },
{ name: '전과목/초격차', label: '전과목', badge: '의대' }
]
const concernOptions = [
'킬러 문항 변형 문제에서 1등급 문턱 좌절',
'특목·자사고 내신 경쟁 속 1~2등급 방어 절실',
'의치한약수 정시 수능 백분위 99% 달성 필요',
'전과목 올 1등급을 위한 초격차 학습 밸런스'
]
const formData = reactive({
grade: '고등학교 1학년',
subject: '수학',
concerns: ['킬러 문항 변형 문제에서 1등급 문턱 좌절'],
region: '',
phone: '',
privacy: true
})
const faqs = reactive([
{
q: '1. 자사고나 특목고 학생들을 위한 고난도 커리큘럼이 준비되어 있나요?',
a: '네, 쌤인증은 전국단위 자사고, 과고, 외고의 고난도 내신 기출과 수능 4점 킬러 문항을 다루는 최상위 전문 강사진이 맞춤 지도를 진행합니다.',
open: false
},
{
q: '2. 의대·최상위권 입시를 위한 장기 로드맵도 제공되나요?',
a: '단순한 진도 나가기가 아닌, 목표 학과에 맞춘 수시 세특 관리 방향과 수능 최저/정시 1등급 완성을 위한 전과목 밸런스 로드맵을 함께 설계합니다.',
open: false
},
{
q: '3. 무료 진단 리포트는 어떤 내용을 담고 있나요?',
a: '학생의 최근 모의고사/내신 오답 유형을 분석하여, 1등급 진입을 가로막는 취약 킬러 패턴과 5단계 해체 솔루션을 무상 제공합니다.',
open: false
},
{
q: '4. 강사진의 강의 역량은 어떻게 보장되나요?',
a: '최상위권 전문 강사진은 까다로운 자체 고난도 문항 풀이 테스트 및 수업 시연 평가를 100% 통과한 검증된 강사만 선별 배치됩니다.',
open: false
}
])
function formatPhone() {
let val = formData.phone.replace(/[^0-9]/g, '')
if (val.length > 3 && val.length <= 7) {
formData.phone = val.substring(0, 3) + '-' + val.substring(3)
} else if (val.length > 7) {
formData.phone = val.substring(0, 3) + '-' + val.substring(3, 7) + '-' + val.substring(7, 11)
} else {
formData.phone = val
}
}
async function handleSubmit() {
if (!formData.phone || formData.phone.length < 12) {
alert('올바른 학부모 연락처(휴대폰 번호)를 입력해 주세요.')
return
}
isSubmitting.value = true
try {
const res = await $fetch('/api/consult', {
method: 'POST',
body: {
name: '학부모 (초격차플랜신청)',
phone: formData.phone,
grade: formData.grade,
schoolName: formData.region || '지역 미기재',
location: formData.region || '온라인 랜딩',
memo: `[과목]: ${formData.subject} / [고민]: ${formData.concerns.join(', ')}`,
url: window.location.href
}
})
if (res && res.success) {
submitSuccess.value = true
setTimeout(() => {
document.getElementById('submitResultBox')?.scrollIntoView({ behavior: 'smooth' })
}, 100)
} else {
alert('신청 접수 중 오류가 발생했습니다. 잠시 후 다시 시도해 주세요.')
}
} catch (err) {
console.error(err)
alert('접수 처리 중 문제가 발생했습니다.')
} finally {
isSubmitting.value = false
}
}
useHead({
title: `${siteName} | 의대·자사고 1등급 초격차 1:1 맞춤과외`,
meta: [
{ name: 'naver-site-verification', content: 'd40ee8cd61dab827dcbd7080e54b095339c44222' },
{ name: 'description', content: `${siteName} - 최상위 1% 도약을 위한 킬러 문항 정복 및 특목·자사고 전과목 올 1등급 마스터 과외.` },
{ property: 'og:title', content: `${siteName} | 전과목 올 1등급 초격차 마스터` },
{ property: 'og:description', content: '의대·자사고 목표! 킬러 문항 5단계 해체 및 최상위 1타 강사진 무료 매칭.' },
{ property: 'og:url', content: siteDomain }
],
script: [
{
type: 'application/ld+json',
children: JSON.stringify({
'@context': 'https://schema.org',
'@type': 'EducationalOrganization',
name: siteName,
url: siteDomain,
telephone: '+82-10-5961-5807',
areaServed: '울산광역시 및 전국'
})
}
]
})
</script>
<style scoped>
@import url('https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css');
.landing-container {
font-family: 'Pretendard', -apple-system, BlinkMacSystemFont, system-ui, Roboto, sans-serif;
word-break: keep-all;
}
</style>
Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

+21
View File
@@ -0,0 +1,21 @@
/* site7: 쌤인증 - 퓨처리틱 다크 카본 & 비비드 로즈 코랄 / 럭셔리 앰버 골드 */
:root {
--primary-color: #e11d48;
--primary-dark: #09090b;
--primary-light: #fb7185;
--accent-color: #f59e0b;
--accent-light: #fde68a;
--hero-gradient: linear-gradient(135deg, #09090b 0%, #1c1917 40%, #2e1065 100%);
--hero-region-color: #fda4af;
--hero-btn-bg: linear-gradient(135deg, #e11d48 0%, #be123c 100%);
--badge-bg: rgba(225, 29, 72, 0.1);
--card-radius: 14px;
--border-color: #ffe4e6;
--bg-card: #ffffff;
--bg-body: #fafafa;
--text-color: #18181b;
--skills-bg: #fff1f2;
--coaching-bg: #ffe4e6;
--consult-bg: #fff5f5;
--footer-bg: #09090b;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 876 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

@@ -0,0 +1,38 @@
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#0284c7"/>
<stop offset="100%" stop-color="#0369a1"/>
</linearGradient>
<radialGradient id="glow" cx="50%" cy="30%" r="50%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.25"/>
<stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
</radialGradient>
</defs>
<!-- 배경 -->
<rect width="500" height="500" rx="32" fill="url(#grad)"/>
<rect width="500" height="500" rx="32" fill="url(#glow)"/>
<!-- 장식 원형 패턴 -->
<circle cx="430" cy="80" r="100" fill="#ffffff" opacity="0.05"/>
<circle cx="70" cy="420" r="80" fill="#ffffff" opacity="0.04"/>
<!-- 상단 뱃지 -->
<rect x="50" y="45" width="140" height="38" rx="19" fill="#ffffff" opacity="0.2"/>
<text x="120" y="70" font-family="'Pretendard', sans-serif" font-size="16" font-weight="700" fill="#ffffff" text-anchor="middle" letter-spacing="-0.3">초등 집중 1단계</text>
<!-- 중앙 아이콘 -->
<g>
<path d="M170 200 C210 185 240 185 250 195 C260 185 290 185 330 200 L330 290 C290 275 260 275 250 285 C240 275 210 275 170 290 Z" fill="none" stroke="#ffffff" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
<line x1="250" y1="195" x2="250" y2="285" stroke="#ffffff" stroke-width="10" stroke-linecap="round"/>
</g>
<!-- 하단 텍스트 영역 -->
<text x="250" y="380" font-family="'Pretendard', sans-serif" font-size="34" font-weight="900" fill="#ffffff" text-anchor="middle" letter-spacing="-0.8">기초학습</text>
<text x="250" y="420" font-family="'Pretendard', sans-serif" font-size="18" font-weight="600" fill="#ffffff" opacity="0.85" text-anchor="middle" letter-spacing="-0.5">개념 이해와 튼튼한 연산 기본기</text>
<!-- 하단 액션 텍스트 -->
<rect x="175" y="445" width="150" height="28" rx="14" fill="#ffffff" opacity="0.25"/>
<text x="250" y="464" font-family="'Pretendard', sans-serif" font-size="13" font-weight="700" fill="#ffffff" text-anchor="middle">1:1 맞춤 클리닉</text>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -0,0 +1,43 @@
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#059669"/>
<stop offset="100%" stop-color="#047857"/>
</linearGradient>
<radialGradient id="glow" cx="50%" cy="30%" r="50%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.25"/>
<stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
</radialGradient>
</defs>
<!-- 배경 -->
<rect width="500" height="500" rx="32" fill="url(#grad)"/>
<rect width="500" height="500" rx="32" fill="url(#glow)"/>
<!-- 장식 원형 패턴 -->
<circle cx="430" cy="80" r="100" fill="#ffffff" opacity="0.05"/>
<circle cx="70" cy="420" r="80" fill="#ffffff" opacity="0.04"/>
<!-- 상단 뱃지 -->
<rect x="50" y="45" width="140" height="38" rx="19" fill="#ffffff" opacity="0.2"/>
<text x="120" y="70" font-family="'Pretendard', sans-serif" font-size="16" font-weight="700" fill="#ffffff" text-anchor="middle" letter-spacing="-0.3">초등 집중 2단계</text>
<!-- 중앙 아이콘 -->
<g>
<circle cx="250" cy="240" r="60" fill="none" stroke="#ffffff" stroke-width="10"/>
<circle cx="250" cy="240" r="38" fill="none" stroke="#ffffff" stroke-width="8"/>
<circle cx="250" cy="240" r="16" fill="#ffffff"/>
<line x1="250" y1="165" x2="250" y2="185" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
<line x1="250" y1="295" x2="250" y2="315" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
<line x1="175" y1="240" x2="195" y2="240" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
<line x1="305" y1="240" x2="325" y2="240" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
</g>
<!-- 하단 텍스트 영역 -->
<text x="250" y="380" font-family="'Pretendard', sans-serif" font-size="34" font-weight="900" fill="#ffffff" text-anchor="middle" letter-spacing="-0.8">공부방법</text>
<text x="250" y="420" font-family="'Pretendard', sans-serif" font-size="18" font-weight="600" fill="#ffffff" opacity="0.85" text-anchor="middle" letter-spacing="-0.5">스스로 이해하는 올바른 학습 원리</text>
<!-- 하단 액션 텍스트 -->
<rect x="175" y="445" width="150" height="28" rx="14" fill="#ffffff" opacity="0.25"/>
<text x="250" y="464" font-family="'Pretendard', sans-serif" font-size="13" font-weight="700" fill="#ffffff" text-anchor="middle">1:1 맞춤 클리닉</text>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@@ -0,0 +1,38 @@
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#d97706"/>
<stop offset="100%" stop-color="#b45309"/>
</linearGradient>
<radialGradient id="glow" cx="50%" cy="30%" r="50%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.25"/>
<stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
</radialGradient>
</defs>
<!-- 배경 -->
<rect width="500" height="500" rx="32" fill="url(#grad)"/>
<rect width="500" height="500" rx="32" fill="url(#glow)"/>
<!-- 장식 원형 패턴 -->
<circle cx="430" cy="80" r="100" fill="#ffffff" opacity="0.05"/>
<circle cx="70" cy="420" r="80" fill="#ffffff" opacity="0.04"/>
<!-- 상단 뱃지 -->
<rect x="50" y="45" width="140" height="38" rx="19" fill="#ffffff" opacity="0.2"/>
<text x="120" y="70" font-family="'Pretendard', sans-serif" font-size="16" font-weight="700" fill="#ffffff" text-anchor="middle" letter-spacing="-0.3">초등 집중 3단계</text>
<!-- 중앙 아이콘 -->
<g>
<rect x="185" y="180" width="130" height="130" rx="16" fill="none" stroke="#ffffff" stroke-width="10"/>
<path d="M215 245 L238 268 L285 215" fill="none" stroke="#ffffff" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<!-- 하단 텍스트 영역 -->
<text x="250" y="380" font-family="'Pretendard', sans-serif" font-size="34" font-weight="900" fill="#ffffff" text-anchor="middle" letter-spacing="-0.8">숙제검사</text>
<text x="250" y="420" font-family="'Pretendard', sans-serif" font-size="18" font-weight="600" fill="#ffffff" opacity="0.85" text-anchor="middle" letter-spacing="-0.5">매일 1:1 오답 점검과 꼼꼼한 피드백</text>
<!-- 하단 액션 텍스트 -->
<rect x="175" y="445" width="150" height="28" rx="14" fill="#ffffff" opacity="0.25"/>
<text x="250" y="464" font-family="'Pretendard', sans-serif" font-size="13" font-weight="700" fill="#ffffff" text-anchor="middle">1:1 맞춤 클리닉</text>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -0,0 +1,42 @@
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#7c3aed"/>
<stop offset="100%" stop-color="#6d28d9"/>
</linearGradient>
<radialGradient id="glow" cx="50%" cy="30%" r="50%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.25"/>
<stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
</radialGradient>
</defs>
<!-- 배경 -->
<rect width="500" height="500" rx="32" fill="url(#grad)"/>
<rect width="500" height="500" rx="32" fill="url(#glow)"/>
<!-- 장식 원형 패턴 -->
<circle cx="430" cy="80" r="100" fill="#ffffff" opacity="0.05"/>
<circle cx="70" cy="420" r="80" fill="#ffffff" opacity="0.04"/>
<!-- 상단 뱃지 -->
<rect x="50" y="45" width="140" height="38" rx="19" fill="#ffffff" opacity="0.2"/>
<text x="120" y="70" font-family="'Pretendard', sans-serif" font-size="16" font-weight="700" fill="#ffffff" text-anchor="middle" letter-spacing="-0.3">초등 집중 4단계</text>
<!-- 중앙 아이콘 -->
<g>
<line x1="170" y1="310" x2="330" y2="310" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
<rect x="190" y="245" width="26" height="65" rx="4" fill="#ffffff" opacity="0.6"/>
<rect x="237" y="215" width="26" height="95" rx="4" fill="#ffffff" opacity="0.8"/>
<rect x="284" y="175" width="26" height="135" rx="4" fill="#ffffff"/>
<path d="M195 230 L245 190 L295 155" fill="none" stroke="#fcd34d" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<polygon points="295,145 310,158 290,165" fill="#fcd34d"/>
</g>
<!-- 하단 텍스트 영역 -->
<text x="250" y="380" font-family="'Pretendard', sans-serif" font-size="34" font-weight="900" fill="#ffffff" text-anchor="middle" letter-spacing="-0.8">공부습관</text>
<text x="250" y="420" font-family="'Pretendard', sans-serif" font-size="18" font-weight="600" fill="#ffffff" opacity="0.85" text-anchor="middle" letter-spacing="-0.5">매일 정해진 시간 몰입하는 자기주도력</text>
<!-- 하단 액션 텍스트 -->
<rect x="175" y="445" width="150" height="28" rx="14" fill="#ffffff" opacity="0.25"/>
<text x="250" y="464" font-family="'Pretendard', sans-serif" font-size="13" font-weight="700" fill="#ffffff" text-anchor="middle">1:1 맞춤 클리닉</text>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

@@ -0,0 +1,41 @@
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#e11d48"/>
<stop offset="100%" stop-color="#be123c"/>
</linearGradient>
<radialGradient id="glow" cx="50%" cy="30%" r="50%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.25"/>
<stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
</radialGradient>
</defs>
<!-- 배경 -->
<rect width="500" height="500" rx="32" fill="url(#grad)"/>
<rect width="500" height="500" rx="32" fill="url(#glow)"/>
<!-- 장식 원형 패턴 -->
<circle cx="430" cy="80" r="100" fill="#ffffff" opacity="0.05"/>
<circle cx="70" cy="420" r="80" fill="#ffffff" opacity="0.04"/>
<!-- 상단 뱃지 -->
<rect x="50" y="45" width="140" height="38" rx="19" fill="#ffffff" opacity="0.2"/>
<text x="120" y="70" font-family="'Pretendard', sans-serif" font-size="16" font-weight="700" fill="#ffffff" text-anchor="middle" letter-spacing="-0.3">초등 집중 5단계</text>
<!-- 중앙 아이콘 -->
<g>
<path d="M190 190 L310 190 L300 250 C290 280 270 290 250 290 C230 290 210 280 200 250 Z" fill="none" stroke="#ffffff" stroke-width="10" stroke-linejoin="round"/>
<line x1="250" y1="290" x2="250" y2="320" stroke="#ffffff" stroke-width="12" stroke-linecap="round"/>
<line x1="215" y1="320" x2="285" y2="320" stroke="#ffffff" stroke-width="12" stroke-linecap="round"/>
<path d="M190 205 C170 205 160 220 160 235 C160 250 175 255 195 255" fill="none" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
<path d="M310 205 C330 205 340 220 340 235 C340 250 325 255 305 255" fill="none" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
</g>
<!-- 하단 텍스트 영역 -->
<text x="250" y="380" font-family="'Pretendard', sans-serif" font-size="34" font-weight="900" fill="#ffffff" text-anchor="middle" letter-spacing="-0.8">중등대비</text>
<text x="250" y="420" font-family="'Pretendard', sans-serif" font-size="18" font-weight="600" fill="#ffffff" opacity="0.85" text-anchor="middle" letter-spacing="-0.5">중학교 내신 서술형과 심화 선행</text>
<!-- 하단 액션 텍스트 -->
<rect x="175" y="445" width="150" height="28" rx="14" fill="#ffffff" opacity="0.25"/>
<text x="250" y="464" font-family="'Pretendard', sans-serif" font-size="13" font-weight="700" fill="#ffffff" text-anchor="middle">1:1 맞춤 클리닉</text>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@@ -0,0 +1,43 @@
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#2563eb"/>
<stop offset="100%" stop-color="#1d4ed8"/>
</linearGradient>
<radialGradient id="glow" cx="50%" cy="30%" r="50%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.25"/>
<stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
</radialGradient>
</defs>
<!-- 배경 -->
<rect width="500" height="500" rx="32" fill="url(#grad)"/>
<rect width="500" height="500" rx="32" fill="url(#glow)"/>
<!-- 장식 원형 패턴 -->
<circle cx="430" cy="80" r="100" fill="#ffffff" opacity="0.05"/>
<circle cx="70" cy="420" r="80" fill="#ffffff" opacity="0.04"/>
<!-- 상단 뱃지 -->
<rect x="50" y="45" width="140" height="38" rx="19" fill="#ffffff" opacity="0.2"/>
<text x="120" y="70" font-family="'Pretendard', sans-serif" font-size="16" font-weight="700" fill="#ffffff" text-anchor="middle" letter-spacing="-0.3">실전 시험 대비</text>
<!-- 중앙 아이콘 -->
<g>
<circle cx="250" cy="240" r="60" fill="none" stroke="#ffffff" stroke-width="10"/>
<circle cx="250" cy="240" r="38" fill="none" stroke="#ffffff" stroke-width="8"/>
<circle cx="250" cy="240" r="16" fill="#ffffff"/>
<line x1="250" y1="165" x2="250" y2="185" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
<line x1="250" y1="295" x2="250" y2="315" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
<line x1="175" y1="240" x2="195" y2="240" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
<line x1="305" y1="240" x2="325" y2="240" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
</g>
<!-- 하단 텍스트 영역 -->
<text x="250" y="380" font-family="'Pretendard', sans-serif" font-size="34" font-weight="900" fill="#ffffff" text-anchor="middle" letter-spacing="-0.8">중간고사 수학과외</text>
<text x="250" y="420" font-family="'Pretendard', sans-serif" font-size="18" font-weight="600" fill="#ffffff" opacity="0.85" text-anchor="middle" letter-spacing="-0.5">학교별 기출 족보 및 서술형 킬러 대비</text>
<!-- 하단 액션 텍스트 -->
<rect x="175" y="445" width="150" height="28" rx="14" fill="#ffffff" opacity="0.25"/>
<text x="250" y="464" font-family="'Pretendard', sans-serif" font-size="13" font-weight="700" fill="#ffffff" text-anchor="middle">1:1 맞춤 클리닉</text>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

+38
View File
@@ -0,0 +1,38 @@
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#0d9488"/>
<stop offset="100%" stop-color="#0f766e"/>
</linearGradient>
<radialGradient id="glow" cx="50%" cy="30%" r="50%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.25"/>
<stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
</radialGradient>
</defs>
<!-- 배경 -->
<rect width="500" height="500" rx="32" fill="url(#grad)"/>
<rect width="500" height="500" rx="32" fill="url(#glow)"/>
<!-- 장식 원형 패턴 -->
<circle cx="430" cy="80" r="100" fill="#ffffff" opacity="0.05"/>
<circle cx="70" cy="420" r="80" fill="#ffffff" opacity="0.04"/>
<!-- 상단 뱃지 -->
<rect x="50" y="45" width="140" height="38" rx="19" fill="#ffffff" opacity="0.2"/>
<text x="120" y="70" font-family="'Pretendard', sans-serif" font-size="16" font-weight="700" fill="#ffffff" text-anchor="middle" letter-spacing="-0.3">학기말 총정리</text>
<!-- 중앙 아이콘 -->
<g>
<rect x="185" y="180" width="130" height="130" rx="16" fill="none" stroke="#ffffff" stroke-width="10"/>
<path d="M215 245 L238 268 L285 215" fill="none" stroke="#ffffff" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<!-- 하단 텍스트 영역 -->
<text x="250" y="380" font-family="'Pretendard', sans-serif" font-size="34" font-weight="900" fill="#ffffff" text-anchor="middle" letter-spacing="-0.8">기말고사 수학과외</text>
<text x="250" y="420" font-family="'Pretendard', sans-serif" font-size="18" font-weight="600" fill="#ffffff" opacity="0.85" text-anchor="middle" letter-spacing="-0.5">전 범위 오답 분석 및 약점 완벽 클리닉</text>
<!-- 하단 액션 텍스트 -->
<rect x="175" y="445" width="150" height="28" rx="14" fill="#ffffff" opacity="0.25"/>
<text x="250" y="464" font-family="'Pretendard', sans-serif" font-size="13" font-weight="700" fill="#ffffff" text-anchor="middle">1:1 맞춤 클리닉</text>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

+42
View File
@@ -0,0 +1,42 @@
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#4f46e5"/>
<stop offset="100%" stop-color="#4338ca"/>
</linearGradient>
<radialGradient id="glow" cx="50%" cy="30%" r="50%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.25"/>
<stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
</radialGradient>
</defs>
<!-- 배경 -->
<rect width="500" height="500" rx="32" fill="url(#grad)"/>
<rect width="500" height="500" rx="32" fill="url(#glow)"/>
<!-- 장식 원형 패턴 -->
<circle cx="430" cy="80" r="100" fill="#ffffff" opacity="0.05"/>
<circle cx="70" cy="420" r="80" fill="#ffffff" opacity="0.04"/>
<!-- 상단 뱃지 -->
<rect x="50" y="45" width="140" height="38" rx="19" fill="#ffffff" opacity="0.2"/>
<text x="120" y="70" font-family="'Pretendard', sans-serif" font-size="16" font-weight="700" fill="#ffffff" text-anchor="middle" letter-spacing="-0.3">수능·전국연합</text>
<!-- 중앙 아이콘 -->
<g>
<line x1="170" y1="310" x2="330" y2="310" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
<rect x="190" y="245" width="26" height="65" rx="4" fill="#ffffff" opacity="0.6"/>
<rect x="237" y="215" width="26" height="95" rx="4" fill="#ffffff" opacity="0.8"/>
<rect x="284" y="175" width="26" height="135" rx="4" fill="#ffffff"/>
<path d="M195 230 L245 190 L295 155" fill="none" stroke="#fcd34d" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
<polygon points="295,145 310,158 290,165" fill="#fcd34d"/>
</g>
<!-- 하단 텍스트 영역 -->
<text x="250" y="380" font-family="'Pretendard', sans-serif" font-size="34" font-weight="900" fill="#ffffff" text-anchor="middle" letter-spacing="-0.8">모의고사 수학과외</text>
<text x="250" y="420" font-family="'Pretendard', sans-serif" font-size="18" font-weight="600" fill="#ffffff" opacity="0.85" text-anchor="middle" letter-spacing="-0.5">수능형 사고력 확장 및 시간관리 특훈</text>
<!-- 하단 액션 텍스트 -->
<rect x="175" y="445" width="150" height="28" rx="14" fill="#ffffff" opacity="0.25"/>
<text x="250" y="464" font-family="'Pretendard', sans-serif" font-size="13" font-weight="700" fill="#ffffff" text-anchor="middle">1:1 맞춤 클리닉</text>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

@@ -0,0 +1,38 @@
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#ea580c"/>
<stop offset="100%" stop-color="#c2410c"/>
</linearGradient>
<radialGradient id="glow" cx="50%" cy="30%" r="50%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.25"/>
<stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
</radialGradient>
</defs>
<!-- 배경 -->
<rect width="500" height="500" rx="32" fill="url(#grad)"/>
<rect width="500" height="500" rx="32" fill="url(#glow)"/>
<!-- 장식 원형 패턴 -->
<circle cx="430" cy="80" r="100" fill="#ffffff" opacity="0.05"/>
<circle cx="70" cy="420" r="80" fill="#ffffff" opacity="0.04"/>
<!-- 상단 뱃지 -->
<rect x="50" y="45" width="140" height="38" rx="19" fill="#ffffff" opacity="0.2"/>
<text x="120" y="70" font-family="'Pretendard', sans-serif" font-size="16" font-weight="700" fill="#ffffff" text-anchor="middle" letter-spacing="-0.3">서술형·과제</text>
<!-- 중앙 아이콘 -->
<g>
<path d="M170 200 C210 185 240 185 250 195 C260 185 290 185 330 200 L330 290 C290 275 260 275 250 285 C240 275 210 275 170 290 Z" fill="none" stroke="#ffffff" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
<line x1="250" y1="195" x2="250" y2="285" stroke="#ffffff" stroke-width="10" stroke-linecap="round"/>
</g>
<!-- 하단 텍스트 영역 -->
<text x="250" y="380" font-family="'Pretendard', sans-serif" font-size="34" font-weight="900" fill="#ffffff" text-anchor="middle" letter-spacing="-0.8">수행평가 수학과외</text>
<text x="250" y="420" font-family="'Pretendard', sans-serif" font-size="18" font-weight="600" fill="#ffffff" opacity="0.85" text-anchor="middle" letter-spacing="-0.5">조건 감점 0점화 및 탐구보고서 세특</text>
<!-- 하단 액션 텍스트 -->
<rect x="175" y="445" width="150" height="28" rx="14" fill="#ffffff" opacity="0.25"/>
<text x="250" y="464" font-family="'Pretendard', sans-serif" font-size="13" font-weight="700" fill="#ffffff" text-anchor="middle">1:1 맞춤 클리닉</text>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -0,0 +1,41 @@
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#be123c"/>
<stop offset="100%" stop-color="#9f1239"/>
</linearGradient>
<radialGradient id="glow" cx="50%" cy="30%" r="50%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.25"/>
<stop offset="100%" stop-color="#ffffff" stop-opacity="0"/>
</radialGradient>
</defs>
<!-- 배경 -->
<rect width="500" height="500" rx="32" fill="url(#grad)"/>
<rect width="500" height="500" rx="32" fill="url(#glow)"/>
<!-- 장식 원형 패턴 -->
<circle cx="430" cy="80" r="100" fill="#ffffff" opacity="0.05"/>
<circle cx="70" cy="420" r="80" fill="#ffffff" opacity="0.04"/>
<!-- 상단 뱃지 -->
<rect x="50" y="45" width="140" height="38" rx="19" fill="#ffffff" opacity="0.2"/>
<text x="120" y="70" font-family="'Pretendard', sans-serif" font-size="16" font-weight="700" fill="#ffffff" text-anchor="middle" letter-spacing="-0.3">1등급 집중공략</text>
<!-- 중앙 아이콘 -->
<g>
<path d="M190 190 L310 190 L300 250 C290 280 270 290 250 290 C230 290 210 280 200 250 Z" fill="none" stroke="#ffffff" stroke-width="10" stroke-linejoin="round"/>
<line x1="250" y1="290" x2="250" y2="320" stroke="#ffffff" stroke-width="12" stroke-linecap="round"/>
<line x1="215" y1="320" x2="285" y2="320" stroke="#ffffff" stroke-width="12" stroke-linecap="round"/>
<path d="M190 205 C170 205 160 220 160 235 C160 250 175 255 195 255" fill="none" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
<path d="M310 205 C330 205 340 220 340 235 C340 250 325 255 305 255" fill="none" stroke="#ffffff" stroke-width="8" stroke-linecap="round"/>
</g>
<!-- 하단 텍스트 영역 -->
<text x="250" y="380" font-family="'Pretendard', sans-serif" font-size="34" font-weight="900" fill="#ffffff" text-anchor="middle" letter-spacing="-0.8">내신대비 수학과외</text>
<text x="250" y="420" font-family="'Pretendard', sans-serif" font-size="18" font-weight="600" fill="#ffffff" opacity="0.85" text-anchor="middle" letter-spacing="-0.5">관내 교과서·부교재 적중 1:1 맞춤 지도</text>
<!-- 하단 액션 텍스트 -->
<rect x="175" y="445" width="150" height="28" rx="14" fill="#ffffff" opacity="0.25"/>
<text x="250" y="464" font-family="'Pretendard', sans-serif" font-size="13" font-weight="700" fill="#ffffff" text-anchor="middle">1:1 맞춤 클리닉</text>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 KiB

+18
View File
@@ -0,0 +1,18 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="630" viewBox="0 0 1200 630">
<defs>
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#09090b"/>
<stop offset="50%" stop-color="#1c1917"/>
<stop offset="100%" stop-color="#881337"/>
</linearGradient>
</defs>
<rect width="1200" height="630" fill="url(#bg)"/>
<rect x="80" y="80" width="220" height="48" rx="8" fill="#e11d48"/>
<text x="190" y="112" font-family="'Pretendard', sans-serif" font-size="20" font-weight="900" fill="#ffffff" text-anchor="middle">SSAM INJEUNG</text>
<text x="80" y="240" font-family="'Pretendard', sans-serif" font-size="56" font-weight="900" fill="#ffffff">우리 동네 초·중·고 1:1 맞춤 과외</text>
<text x="80" y="320" font-family="'Pretendard', sans-serif" font-size="68" font-weight="900" fill="#f59e0b">쌤인증 1:1 맞춤과외</text>
<text x="80" y="420" font-family="'Pretendard', sans-serif" font-size="30" font-weight="500" fill="#e0e7ff">국어 · 영어 · 수학 · 과학 · 사회 · 수행평가 세특</text>
<text x="80" y="480" font-family="'Pretendard', sans-serif" font-size="28" font-weight="700" fill="#ffffff">전국 568개 동 학교별 기출 족보 완벽 분석</text>
<rect x="80" y="530" width="340" height="50" rx="25" fill="#10b981"/>
<text x="250" y="563" font-family="'Pretendard', sans-serif" font-size="24" font-weight="700" fill="#ffffff" text-anchor="middle">1회 무료 상담: 010-5961-5807</text>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+124
View File
@@ -0,0 +1,124 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 480" width="100%" height="100%">
<defs>
<!-- 배경 그라디언트 -->
<linearGradient id="bgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#0f172a" />
<stop offset="50%" stop-color="#1e3a8a" />
<stop offset="100%" stop-color="#3b82f6" />
</linearGradient>
<!-- 골드 액센트 그라디언트 -->
<linearGradient id="goldGrad" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#f59e0b" />
<stop offset="100%" stop-color="#fbbf24" />
</linearGradient>
<!-- 카드 반투명 배경 -->
<linearGradient id="cardGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.12" />
<stop offset="100%" stop-color="#ffffff" stop-opacity="0.04" />
</linearGradient>
</defs>
<!-- 메인 배경 -->
<rect width="1200" height="480" rx="16" fill="url(#bgGrad)" />
<!-- 배경 기하학적 그리드 및 원형 장식 -->
<circle cx="1100" cy="80" r="320" fill="#3b82f6" opacity="0.15" />
<circle cx="950" cy="400" r="260" fill="#60a5fa" opacity="0.1" />
<circle cx="150" cy="420" r="180" fill="#1d4ed8" opacity="0.2" />
<!-- 격자 선 데코레이션 -->
<path d="M 0,120 L 1200,120 M 0,240 L 1200,240 M 0,360 L 1200,360" stroke="#ffffff" stroke-opacity="0.05" stroke-width="1" />
<path d="M 300,0 L 300,480 M 600,0 L 600,480 M 900,0 L 900,480" stroke="#ffffff" stroke-opacity="0.05" stroke-width="1" />
<!-- 좌측 컨텐츠 영역 -->
<!-- 1. 상단 배지 태그 -->
<rect x="70" y="55" width="220" height="38" rx="19" fill="url(#goldGrad)" />
<text x="180" y="80" fill="#0f172a" font-size="15" font-weight="900" font-family="'Pretendard', sans-serif" text-anchor="middle">
2026 1:1 밀착 내신 케어
</text>
<!-- 2. 메인 헤드라인 텍스트 -->
<text x="70" y="150" fill="#ffffff" font-size="42" font-weight="900" font-family="'Pretendard', sans-serif" letter-spacing="-1">
우리 학교 기출 족보 완벽 분석
</text>
<text x="70" y="210" fill="#60a5fa" font-size="42" font-weight="900" font-family="'Pretendard', sans-serif" letter-spacing="-1">
내신 1등급 역전 솔루션
</text>
<!-- 3. 서브 카피 텍스트 -->
<text x="70" y="265" fill="#cbd5e1" font-size="18" font-family="'Pretendard', sans-serif" font-weight="500">
서술형 감점 0점 방지부터 수능 1등급 킬러 문항까지,
</text>
<text x="70" y="295" fill="#94a3b8" font-size="18" font-family="'Pretendard', sans-serif" font-weight="500">
관내 학교 전문 검증 튜터가 1:1 맞춤형 커리큘럼을 직접 설계합니다.
</text>
<!-- 4. 하단 특징 뱃지들 -->
<g transform="translate(70, 345)">
<!-- 뱃지 1 -->
<rect x="0" y="0" width="170" height="48" rx="8" fill="url(#cardGrad)" stroke="#ffffff" stroke-opacity="0.2" />
<circle cx="28" cy="24" r="10" fill="#10b981" />
<text x="28" y="28" fill="#ffffff" font-size="11" font-weight="900" text-anchor="middle">✓</text>
<text x="48" y="29" fill="#ffffff" font-size="14" font-weight="700" font-family="'Pretendard', sans-serif">1회 무료 레벨진단</text>
<!-- 뱃지 2 -->
<rect x="185" y="0" width="180" height="48" rx="8" fill="url(#cardGrad)" stroke="#ffffff" stroke-opacity="0.2" />
<circle cx="213" cy="24" r="10" fill="#3b82f6" />
<text x="213" y="28" fill="#ffffff" font-size="11" font-weight="900" text-anchor="middle">✓</text>
<text x="233" y="29" fill="#ffffff" font-size="14" font-weight="700" font-family="'Pretendard', sans-serif">관내 학교 3개년 기출</text>
<!-- 뱃지 3 -->
<rect x="380" y="0" width="175" height="48" rx="8" fill="url(#cardGrad)" stroke="#ffffff" stroke-opacity="0.2" />
<circle cx="408" cy="24" r="10" fill="#f59e0b" />
<text x="408" y="28" fill="#ffffff" font-size="11" font-weight="900" text-anchor="middle">✓</text>
<text x="428" y="29" fill="#ffffff" font-size="14" font-weight="700" font-family="'Pretendard', sans-serif">수행평가 · 세특 코칭</text>
</g>
<!-- 우측 비주얼 인포그래픽 카드 영역 -->
<g transform="translate(740, 60)">
<!-- 우측 메인 카드 배경 -->
<rect x="0" y="0" width="390" height="350" rx="16" fill="url(#cardGrad)" stroke="#ffffff" stroke-opacity="0.2" />
<!-- 성적 상승 그래프 비주얼 -->
<text x="35" y="55" fill="#f8fafc" font-size="18" font-weight="800" font-family="'Pretendard', sans-serif">
AESEO 성적 향상 지표
</text>
<text x="35" y="80" fill="#94a3b8" font-size="13" font-family="'Pretendard', sans-serif">
수강생 평균 2.3등급 수직 상승
</text>
<!-- 등급 비교 바 차트 -->
<g transform="translate(35, 120)">
<!-- 이전 성적 바 -->
<rect x="0" y="70" width="65" height="90" rx="6" fill="#475569" opacity="0.6" />
<text x="32" y="55" fill="#94a3b8" font-size="13" font-weight="700" text-anchor="middle">4등급</text>
<text x="32" y="185" fill="#94a3b8" font-size="12" text-anchor="middle">수강 전</text>
<!-- 과외애서 수강 후 바 -->
<rect x="95" y="10" width="75" height="150" rx="6" fill="url(#goldGrad)" />
<text x="132" y="-5" fill="#f59e0b" font-size="16" font-weight="900" text-anchor="middle">1등급!</text>
<text x="132" y="185" fill="#ffffff" font-size="13" font-weight="800" text-anchor="middle">수강 3개월</text>
<!-- 화살표 곡선 -->
<path d="M 40,75 Q 85,25 105,25" fill="none" stroke="#fbbf24" stroke-width="3" stroke-dasharray="4,4" />
<!-- 오른쪽 미니 스탯 -->
<g transform="translate(195, 20)">
<rect x="0" y="0" width="125" height="55" rx="8" fill="#1e293b" stroke="#334155" />
<text x="12" y="24" fill="#94a3b8" font-size="11">내신 적중률</text>
<text x="12" y="45" fill="#38bdf8" font-size="18" font-weight="900">96.8%</text>
<rect x="0" y="70" width="125" height="55" rx="8" fill="#1e293b" stroke="#334155" />
<text x="12" y="94" fill="#94a3b8" font-size="11">학부모 만족도</text>
<text x="12" y="115" fill="#10b981" font-size="18" font-weight="900">99.2%</text>
</g>
</g>
<!-- 우측 하단 워터마크 -->
<text x="355" y="325" fill="#ffffff" opacity="0.3" font-size="13" font-weight="800" text-anchor="end" font-family="'Pretendard', sans-serif">
AESEO TUTORING POSTER
</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 KiB

+7
View File
@@ -0,0 +1,7 @@
User-agent: *
Allow: /
User-agent: Yeti
Allow: /
Sitemap: https://soohyun.xyz/sitemap.xml
+928
View File
@@ -0,0 +1,928 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://soohyun.xyz/</loc>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8B%AC%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8B%AC%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8B%AC%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8B%AC%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8C%80%ED%98%84%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8C%80%ED%98%84%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8C%80%ED%98%84%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8C%80%ED%98%84%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%AC%B4%EA%B1%B0%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%AC%B4%EA%B1%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%AC%B4%EA%B1%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%AC%B4%EA%B1%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%82%BC%EC%82%B0%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%82%BC%EC%82%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%82%BC%EC%82%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%82%BC%EC%82%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%A0%EC%95%94%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%A0%EC%95%94%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%A0%EC%95%94%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%A0%EC%95%94%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%88%98%EC%95%94%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%88%98%EC%95%94%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%88%98%EC%95%94%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%88%98%EC%95%94%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%8B%A0%EC%A0%95%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%8B%A0%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%8B%A0%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%8B%A0%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%95%BC%EC%9D%8C%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%95%BC%EC%9D%8C%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%95%BC%EC%9D%8C%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%95%BC%EC%9D%8C%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%98%A5%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%98%A5%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%98%A5%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%98%A5%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B0%A9%EC%96%B4%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B0%A9%EC%96%B4%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B0%A9%EC%96%B4%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B0%A9%EC%96%B4%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%9C%EB%B6%80%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%9C%EB%B6%80%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%9C%EB%B6%80%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%9C%EB%B6%80%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9D%BC%EC%82%B0%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9D%BC%EC%82%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9D%BC%EC%82%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9D%BC%EC%82%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%A0%84%ED%95%98%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%A0%84%ED%95%98%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%A0%84%ED%95%98%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%A0%84%ED%95%98%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%99%94%EC%A0%95%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%99%94%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%99%94%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%99%94%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8B%AC%EC%B2%9C%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8B%AC%EC%B2%9C%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8B%AC%EC%B2%9C%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8B%AC%EC%B2%9C%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%A7%A4%EA%B3%A1%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%A7%A4%EA%B3%A1%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%A7%A4%EA%B3%A1%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%A7%A4%EA%B3%A1%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%82%B0%ED%95%98%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%82%B0%ED%95%98%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%82%B0%ED%95%98%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%82%B0%ED%95%98%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%86%A1%EC%A0%95%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%86%A1%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%86%A1%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%86%A1%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%96%91%EC%A0%95%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%96%91%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%96%91%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%96%91%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%97%B0%EC%95%94%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%97%B0%EC%95%94%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%97%B0%EC%95%94%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%97%B0%EC%95%94%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%97%BC%ED%8F%AC%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%97%BC%ED%8F%AC%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%97%BC%ED%8F%AC%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%97%BC%ED%8F%AC%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%A4%91%EC%82%B0%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%A4%91%EC%82%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%A4%91%EC%82%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%A4%91%EC%82%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%B2%9C%EA%B3%A1%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%B2%9C%EA%B3%A1%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%B2%9C%EA%B3%A1%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%B2%9C%EA%B3%A1%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%98%B8%EA%B3%84%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%98%B8%EA%B3%84%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%98%B8%EA%B3%84%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%98%B8%EA%B3%84%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%99%94%EB%B4%89%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%99%94%EB%B4%89%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%99%94%EB%B4%89%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%99%94%EB%B4%89%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%9A%A8%EB%AC%B8%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%9A%A8%EB%AC%B8%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%9A%A8%EB%AC%B8%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%9A%A8%EB%AC%B8%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EA%B5%AC%EC%98%81%EB%A6%AC</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EA%B5%AC%EC%98%81%EB%A6%AC-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EA%B5%AC%EC%98%81%EB%A6%AC-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EA%B5%AC%EC%98%81%EB%A6%AC-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B2%94%EC%84%9C%EC%9D%8D</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B2%94%EC%84%9C%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B2%94%EC%84%9C%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B2%94%EC%84%9C%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%82%BC%EB%82%A8%EC%9D%8D</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%82%BC%EB%82%A8%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%82%BC%EB%82%A8%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%82%BC%EB%82%A8%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%83%81%EB%B6%81%EB%A9%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%83%81%EB%B6%81%EB%A9%B4-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%83%81%EB%B6%81%EB%A9%B4-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%83%81%EB%B6%81%EB%A9%B4-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%96%B8%EC%96%91%EC%9D%8D</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%96%B8%EC%96%91%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%96%B8%EC%96%91%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%96%B8%EC%96%91%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%98%A8%EC%82%B0%EC%9D%8D</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%98%A8%EC%82%B0%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%98%A8%EC%82%B0%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%98%A8%EC%82%B0%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%98%A8%EC%96%91%EC%9D%8D</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%98%A8%EC%96%91%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%98%A8%EC%96%91%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%98%A8%EC%96%91%EC%9D%8D-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9B%85%EC%B4%8C%EB%A9%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9B%85%EC%B4%8C%EB%A9%B4-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9B%85%EC%B4%8C%EB%A9%B4-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9B%85%EC%B4%8C%EB%A9%B4-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%B2%9C%EC%83%81%EB%A6%AC</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%B2%9C%EC%83%81%EB%A6%AC-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%B2%9C%EC%83%81%EB%A6%AC-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%B2%9C%EC%83%81%EB%A6%AC-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8B%A4%EC%9A%B4%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8B%A4%EC%9A%B4%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8B%A4%EC%9A%B4%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%8B%A4%EC%9A%B4%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B0%98%EA%B5%AC%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B0%98%EA%B5%AC%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B0%98%EA%B5%AC%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B0%98%EA%B5%AC%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B3%91%EC%98%81%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B3%91%EC%98%81%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B3%91%EC%98%81%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B3%91%EC%98%81%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B3%B5%EC%82%B0%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B3%B5%EC%82%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B3%B5%EC%82%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EB%B3%B5%EC%82%B0%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%B1%EB%82%A8%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%B1%EB%82%A8%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%B1%EB%82%A8%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%B1%EB%82%A8%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%B1%EC%95%88%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%B1%EC%95%88%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%B1%EC%95%88%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%84%B1%EC%95%88%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%95%BD%EC%82%AC%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%95%BD%EC%82%AC%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%95%BD%EC%82%AC%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%95%BD%EC%82%AC%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9A%B0%EC%A0%95%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9A%B0%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9A%B0%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9A%B0%EC%A0%95%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9C%A0%EA%B3%A1%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9C%A0%EA%B3%A1%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9C%A0%EA%B3%A1%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%EC%9C%A0%EA%B3%A1%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%83%9C%ED%99%94%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%83%9C%ED%99%94%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%83%9C%ED%99%94%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%83%9C%ED%99%94%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%95%99%EC%84%B1%EB%8F%99</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%95%99%EC%84%B1%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%88%98%ED%95%99</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%95%99%EC%84%B1%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EC%98%81%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://soohyun.xyz/%ED%95%99%EC%84%B1%EB%8F%99-%EC%A4%91%ED%95%99%EC%83%9D-%EA%B5%AD%EC%96%B4</loc>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
</urlset>
+141
View File
@@ -0,0 +1,141 @@
export default defineEventHandler(async (event) => {
const config = useRuntimeConfig()
const body = await readBody(event)
const {
studentName,
parentPhone,
name,
phone,
schoolName,
grade,
location,
regionName,
memo,
url
} = body || {}
const finalStudentName = studentName || name || '미기재'
const finalParentPhone = parentPhone || phone || ''
const finalLocation = location || regionName || '미기재'
const finalGrade = grade || '미지정'
const finalSchool = schoolName || '미기재'
if (!finalParentPhone) {
throw createError({
statusCode: 400,
statusMessage: '부모님 연락처를 올바르게 입력해주세요.'
})
}
const webhookUrl = config.discordWebhookUrl || 'https://discordapp.com/api/webhooks/1557204310369116210/9J4y96kmSbYNGtw5OxRgIz7InWcM8o3f8UX0Ad71-IyofwdS7tWmXkF7dj457-I8Ypiu'
const siteName = config.public.siteName || '1:1 맞춤과외'
const siteDomain = config.public.siteDomain || 'https://aeseo.cloud'
// 한국 시간 (KST)
const now = new Date()
const kstTime = new Intl.DateTimeFormat('ko-KR', {
timeZone: 'Asia/Seoul',
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false
}).format(now)
// 디스코드 Embed 페이로드 (이모지 완전 배제, 깔끔한 직사각형 뱃지 규격)
const discordPayload = {
username: `${siteName} 상담 알림 봇`,
avatar_url: 'https://cdn-icons-png.flaticon.com/512/2997/2997295.png',
embeds: [
{
title: `[신규 무료 상담 신청 접수] ${finalLocation} - ${finalGrade} (${finalStudentName} 학생)`,
description: `**${siteName}** 사이트에서 새로운 1:1 학습 상담 신청이 접수되었습니다.`,
color: 0x991b1b, // 신뢰감 있는 딥 레드/네이비
fields: [
{
name: "[접수 사이트]",
value: `**${siteName}**\n${siteDomain}`,
inline: true
},
{
name: "[사는 곳]",
value: finalLocation,
inline: true
},
{
name: "[학생 이름]",
value: `**${finalStudentName}**`,
inline: true
},
{
name: "[부모님 연락처]",
value: `**${finalParentPhone}**`,
inline: true
},
{
name: "[다니는 학교]",
value: finalSchool,
inline: true
},
{
name: "[학년]",
value: finalGrade,
inline: true
},
{
name: "[접수 일시 (KST)]",
value: kstTime,
inline: true
},
{
name: "[유입 페이지 URL]",
value: url ? `${url}` : `${siteDomain}`,
inline: false
},
{
name: "[상담문의 내용 (선택)]",
value: memo && memo.trim() ? memo.trim() : '입력된 상세 문의 내용 없음',
inline: false
}
],
footer: {
text: `${siteName} 실시간 상담 알림 시스템`
},
timestamp: now.toISOString()
}
]
}
try {
const res = await fetch(webhookUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(discordPayload)
})
if (!res.ok) {
const errText = await res.text()
console.error('[Discord Webhook Error]:', res.status, errText)
return {
success: false,
message: '디스코드 전송 중 오류가 발생했습니다.'
}
}
return {
success: true,
message: '상담 신청이 정상적으로 완료되었습니다.'
}
} catch (err: any) {
console.error('[Consult Submission Error]:', err.message)
return {
success: false,
message: '서버 오류로 인해 전송에 실패했습니다.'
}
}
})
+32
View File
@@ -0,0 +1,32 @@
import regionsData from '../../data/regions.json'
export default defineEventHandler((event) => {
const config = useRuntimeConfig()
const baseUrl = config.public.siteDomain || 'https://soohyun.xyz'
const list = regionsData.list as Array<{ sido: string, sigungu: string, dong: string }>
const subjects = ['영어', '수학', '국어', '통합과학', '통합사회']
const grades = ['중학생', '고등학생']
let xml = `<?xml version="1.0" encoding="UTF-8"?>\n`
xml += `<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n`
// 메인
xml += ` <url>\n <loc>${baseUrl}/</loc>\n <changefreq>daily</changefreq>\n <priority>1.0</priority>\n </url>\n`
// 568개 동별 주요 과목 및 학년 URL 생성
list.forEach(r => {
// 1. 동 대표
xml += ` <url>\n <loc>${baseUrl}/${encodeURIComponent(r.dong)}</loc>\n <changefreq>weekly</changefreq>\n <priority>0.8</priority>\n </url>\n`
// 2. 동-과목-학년 대표 조합
subjects.slice(0, 3).forEach(sub => {
xml += ` <url>\n <loc>${baseUrl}/${encodeURIComponent(r.dong)}-${encodeURIComponent(grades[0])}-${encodeURIComponent(sub)}</loc>\n <changefreq>weekly</changefreq>\n <priority>0.7</priority>\n </url>\n`
})
})
xml += `</urlset>`
setHeader(event, 'content-type', 'application/xml; charset=utf-8')
return xml
})
+4
View File
@@ -0,0 +1,4 @@
{
// https://nuxt.com/docs/guide/concepts/typescript
"extends": "./.nuxt/tsconfig.json"
}
+214
View File
@@ -0,0 +1,214 @@
import regionsData from '../data/regions.json'
import keywordsData from '../data/keywords.json'
import curriculumsData from '../data/curriculums.json'
export interface RegionInfo {
fullName: string
sido: string
sigungu: string
dong: string
}
export interface ParsedRouteParams {
region: RegionInfo
sido: string
shortSido: string
sigungu: string
dong: string
shortRegionName: string
grade: string
subjectKey: string
subjectName: string
targetTerm: string
fullKeyword: string
}
// 5대 핵심 과목 정의
export const SUBJECTS_MAP: Record<string, { key: string, name: string, badge: string, aliases: string[] }> = {
korean: { key: 'korean', name: '국어', badge: '문해력·서술형', aliases: ['국어', '문학', '독서', '비문학', '화법'] },
english: { key: 'english', name: '영어', badge: '구문독해·내신', aliases: ['영어', '영문법', '영어독해', '공통영어'] },
math: { key: 'math', name: '수학', badge: '개념정립·킬러문항', aliases: ['수학', '수1', '수2', '미적분', '확통', '기하'] },
science: { key: 'science', name: '과학', badge: '통합과학·물화생지', aliases: ['과학', '통합과학', '물리', '화학', '생명과학', '지구과학', '과탐'] },
social: { key: 'social', name: '사회', badge: '통합사회·한국사', aliases: ['사회', '통합사회', '한국사', '사탐', '역사', '사회문화', '생활과윤리'] }
}
// 학년 정의
export const GRADES_LIST = [
{ key: 'middle', name: '중학생', aliases: ['중학생', '중1', '중2', '중3', '중등'] },
{ key: 'high', name: '고등학생', aliases: ['고등학생', '고1', '고2', '고3', '고등', '예비고1'] },
{ key: 'elem', name: '초등학생', aliases: ['초등학생', '초등', '초5', '초6'] }
]
// 동 이름으로 지역 검색
export function getRegionByDong(dongQuery: string): RegionInfo | null {
if (!dongQuery) return null
const clean = dongQuery.trim().replace(/동$/, '') // '황금' 또는 '황금동' 모두 매칭
const map = regionsData.dongMap as Record<string, RegionInfo[]>
// 1. 정확 매칭 (황금동)
if (map[dongQuery] && map[dongQuery].length > 0) {
return map[dongQuery][0]
}
// 2. '동' 붙여서 매칭
if (map[dongQuery + '동'] && map[dongQuery + '동'].length > 0) {
return map[dongQuery + '동'][0]
}
// 3. 리스트 전체 순회 매칭
const found = (regionsData.list as RegionInfo[]).find(r =>
r.dong === dongQuery ||
r.dong === (dongQuery + '동') ||
r.dong.startsWith(clean)
)
return found || null
}
// 17개 시도 축약 매핑 및 헬퍼 함수 (예: 대구광역시 -> 대구, 서울특별시 -> 서울)
export function getShortSido(sido: string): string {
if (!sido) return ''
const trimmed = sido.trim()
if (trimmed.includes('서울')) return '서울'
if (trimmed.includes('대구')) return '대구'
if (trimmed.includes('부산')) return '부산'
if (trimmed.includes('인천')) return '인천'
if (trimmed.includes('광주')) return '광주'
if (trimmed.includes('대전')) return '대전'
if (trimmed.includes('울산')) return '울산'
if (trimmed.includes('세종')) return '세종'
if (trimmed.includes('경기')) return '경기'
if (trimmed.includes('강원')) return '강원'
if (trimmed.includes('충북') || trimmed.includes('충청북')) return '충북'
if (trimmed.includes('충남') || trimmed.includes('충청남')) return '충남'
if (trimmed.includes('전북') || trimmed.includes('전라북')) return '전북'
if (trimmed.includes('전남') || trimmed.includes('전라남')) return '전남'
if (trimmed.includes('경북') || trimmed.includes('경상북')) return '경북'
if (trimmed.includes('경남') || trimmed.includes('경상남')) return '경남'
if (trimmed.includes('제주')) return '제주'
return trimmed.slice(0, 2)
}
// 축약 지역명 생성 (예: '대구 황금동', '서울 대치동', '경기 정발산동')
export function getShortRegionName(sido: string, dong: string, sigungu?: string): string {
const meta = regionsData as any
const prefix = meta.keywordPrefix !== undefined ? meta.keywordPrefix : `${getShortSido(sido)} `
if (prefix === '') {
// 서울 (예: 강남구 개포동)
return `${sigungu ? sigungu + ' ' : ''}${dong || ''}`.trim()
}
// 경기, 인천, 광주, 부산, 대구, 대전 (예: 경기 수원 영통동, 대구 수성구 범어동)
return `${prefix}${sigungu ? sigungu + ' ' : ''}${dong || ''}`.trim()
} ${dong || ''}`.trim()
}
// 지능형 URL 슬러그 파서
// 지원 예시:
// - ['대구광역시', '수성구', '황금동']
// - ['대구광역시', '황금동', '중학생', '영어']
// - ['황금동', '중학생', '영어']
// - ['황금동-중학생-영어']
// - '대구광역시-황금동-중학생-영어'
export function parseRouteSlug(slugInput: string | string[]): ParsedRouteParams {
let tokens: string[] = []
if (Array.isArray(slugInput)) {
tokens = slugInput.flatMap(s => decodeURIComponent(s).split(/[-_\s/]+/))
} else if (typeof slugInput === 'string' && slugInput.trim()) {
tokens = decodeURIComponent(slugInput).split(/[-_\s/]+/)
}
tokens = tokens.map(t => t.trim()).filter(Boolean)
let matchedRegion: RegionInfo | null = null
let detectedGrade = '중학생'
let detectedSubjectKey = 'english'
let detectedSubjectName = '영어'
let detectedTerm = '과외'
// 1. 토큰들 중 동 이름 매칭
for (const token of tokens) {
const reg = getRegionByDong(token)
if (reg) {
matchedRegion = reg
break
}
}
// 2. 동 이름이 토큰에 없으면 전체 리스트에서 부분 일치 검색
if (!matchedRegion && tokens.length > 0) {
for (const token of tokens) {
const found = (regionsData.list as RegionInfo[]).find(r => token.includes(r.dong) || (token.length >= 2 && r.dong.includes(token)))
if (found) {
matchedRegion = found
break
}
}
}
// 기본값 (568개 타겟 지역 중 첫 번째 기준)
if (!matchedRegion) {
matchedRegion = (regionsData.list as RegionInfo[])[0] || {
fullName: '경기도 고양시 덕양구 고양동',
sido: '경기도',
sigungu: '고양시 덕양구',
dong: '고양동'
}
}
// 3. 학년 추출
const fullText = tokens.join(' ')
for (const g of GRADES_LIST) {
if (g.aliases.some(a => fullText.includes(a))) {
detectedGrade = g.name
break
}
}
// 4. 과목 추출
for (const [key, sub] of Object.entries(SUBJECTS_MAP)) {
if (sub.aliases.some(a => fullText.includes(a))) {
detectedSubjectKey = key
detectedSubjectName = sub.name
break
}
}
// 5. 목적/행동 추출
if (fullText.includes('내신')) detectedTerm = '내신대비'
else if (fullText.includes('학원')) detectedTerm = '학원추천'
else if (fullText.includes('수능')) detectedTerm = '수능대비'
else if (fullText.includes('기출')) detectedTerm = '기출문제분석'
else detectedTerm = '1:1 맞춤과외'
const shortSido = getShortSido(matchedRegion.sido)
const shortRegionName = getShortRegionName(matchedRegion.sido, matchedRegion.dong, matchedRegion.sigungu)
const fullKeyword = `${shortRegionName} ${detectedGrade} ${detectedSubjectName} ${detectedTerm}`
return {
region: matchedRegion,
sido: matchedRegion.sido,
shortSido,
sigungu: matchedRegion.sigungu,
dong: matchedRegion.dong,
shortRegionName,
grade: detectedGrade,
subjectKey: detectedSubjectKey,
subjectName: detectedSubjectName,
targetTerm: detectedTerm,
fullKeyword
}
}
export function getAllSubjectsList() {
return Object.values(SUBJECTS_MAP)
}
export function getCurriculumBySubject(subjectKey: string) {
const data = curriculumsData as any
return data[subjectKey] || data['english']
}
export function getPopularRegions(count = 20) {
return (regionsData.list as RegionInfo[]).slice(0, count)
}
export function getTotalRegionsCount() {
return regionsData.total
}
+93
View File
@@ -0,0 +1,93 @@
import type { ParsedRouteParams } from './dataHelper'
import { getShortRegionName } from './dataHelper'
export function generateSeoMeta(parsed: ParsedRouteParams, siteName = '쌤인증', siteDomain = 'https://soohyun.xyz') {
const { sido, sigungu, dong, shortRegionName, grade, subjectName, targetTerm, fullKeyword } = parsed
const regionTitle = shortRegionName || getShortRegionName(sido, dong)
const pageTitle = `${regionTitle} ${grade} ${subjectName} 과외 | ${dong} 내신·수능 1:1 맞춤수업 - ${siteName}`
const pageDescription = `${sido} ${sigungu} ${dong} 지역 초·중·고 ${grade} ${subjectName} 1:1 전문 과외. 인근 학교별 기출 족보 완벽 분석, 서술형 감점 방지, 취약 개념 클리닉 및 맞춤 학습 플래너 제공. 지금 ${dong} 무료 학습 진단 및 모의수업을 신청하세요.`
// 표준 Canonical URL
const canonicalUrl = `${siteDomain}/${encodeURIComponent(dong)}-${encodeURIComponent(grade)}-${encodeURIComponent(subjectName)}`
const jsonLd = {
'@context': 'https://schema.org',
'@graph': [
{
'@type': 'EducationalOrganization',
'name': siteName,
'url': siteDomain,
'description': pageDescription,
'areaServed': {
'@type': 'AdministrativeArea',
'name': `${sido} ${sigungu} ${dong}`
}
},
{
'@type': 'Course',
'name': `${dong} ${grade} ${subjectName} 1:1 맞춤 과외`,
'description': `${dong} 인근 학교 내신 출제 경향 분석 및 ${subjectName} 1등급 도약 커리큘럼`,
'provider': {
'@type': 'Organization',
'name': siteName
}
},
{
'@type': 'BreadcrumbList',
'itemListElement': [
{
'@type': 'ListItem',
'position': 1,
'name': '홈',
'item': siteDomain
},
{
'@type': 'ListItem',
'position': 2,
'name': sido,
'item': `${siteDomain}/${encodeURIComponent(sido)}`
},
{
'@type': 'ListItem',
'position': 3,
'name': sigungu,
'item': `${siteDomain}/${encodeURIComponent(sigungu)}`
},
{
'@type': 'ListItem',
'position': 4,
'name': `${dong} ${subjectName}`,
'item': canonicalUrl
}
]
}
]
}
return {
title: pageTitle,
meta: [
{ name: 'description', content: pageDescription },
{ name: 'keywords', content: `${dong}과외, ${dong}${subjectName}과외, ${dong}${grade}과외, ${sigungu}과외, ${dong}학원, ${dong}내신대비, ${subjectName}1:1과외` },
{ property: 'og:type', content: 'website' },
{ property: 'og:title', content: pageTitle },
{ property: 'og:description', content: pageDescription },
{ property: 'og:url', content: canonicalUrl },
{ property: 'og:site_name', content: siteName },
{ property: 'og:image', content: `${siteDomain}/img/og-preview.png` },
{ name: 'twitter:card', content: 'summary_large_image' },
{ name: 'twitter:title', content: pageTitle },
{ name: 'twitter:description', content: pageDescription }
],
link: [
{ rel: 'canonical', href: canonicalUrl }
],
script: [
{
type: 'application/ld+json',
children: JSON.stringify(jsonLd)
}
]
}
}