The Source.
이 블로그를 구성하는 실제 소스 코드(Raw Code)의 로직을 탐색합니다.
src / pages ReadOnly
* 파일을 클릭하면 우측 에디터에
실제 로직(Frontmatter)이 로드됩니다.
ASTRO index.astro
---
// src/pages/index.astro
import BaseLayout from '../layouts/BaseLayout.astro';
import { getCollection } from 'astro:content';
import Hero from '../components/home/Hero.astro';
import CourseCarousel from '../components/home/CourseCarousel.astro';
import LatestBrewing from '../components/home/LatestBrewing.astro';
import SystemLogs from '../components/home/SystemLogs.astro';
// 데이터 가져오기 및 가공
const allPosts = await getCollection('blog');
const sortedPosts = allPosts.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf());
const latestPosts = sortedPosts.slice(0, 3);
const allUpdates = await getCollection('updates');
const recentUpdates = allUpdates
.sort((a, b) => {
const dateDiff = b.data.date.valueOf() - a.data.date.valueOf();
if (dateDiff !== 0) return dateDiff;
return b.data.version.localeCompare(a.data.version, undefined, { numeric: true });
})
.slice(0, 5);
--- ---
// src/pages/about.astro
import BaseLayout from '../layouts/BaseLayout.astro';
import PageTitle from '../components/PageTitle.astro';
import Badge from '../components/Badge.astro';
// SVGs for the Trio and UI
const Icons = {
jiyu: `<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 8h1a4 4 0 1 1 0 8h-1"/><path d="M3 8h14v9a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4Z"/><line x1="6" y1="2" x2="6" y2="4"/><line x1="10" y1="2" x2="10" y2="4"/><line x1="14" y1="2" x2="14" y2="4"/></svg>`,
gemini: `<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z"/><path d="M5 3v4"/><path d="M19 17v4"/><path d="M3 5h4"/><path d="M17 19h4"/></svg>`,
antigravity: `<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"/><line x1="12" x2="20" y1="19" y2="19"/></svg>`,
code: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg>`,
laptop: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect width="18" height="12" x="3" y="4" rx="2" ry="2"/><line x1="2" y1="20" x2="22" y2="20"/></svg>`,
zap: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg>`,
backpack: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 10a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2Z"/><path d="M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"/><path d="M8 21v-5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v5"/><path d="M8 10h8"/></svg>`,
mail: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="20" height="16" x="2" y="4" rx="2"/><path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"/></svg>`
};
const team = [
{
name: "JIYU.",
role: "The Brewer & Architect",
desc: "기술의 본질을 우려내는 마스터입니다. 윈도우 ARM 환경에서 AI와 대화하며 기획과 설계를 담당하고, 전체적인 '맛'을 결정합니다.",
variant: "jiyu",
badges: ["Vision", "Design"]
},
{
name: "Gemini.",
role: "The Navigator",
desc: "아이디어를 정교한 논리로 다듬는 나침반입니다. 복잡한 문제를 분석하고 구현의 근거를 정립하는 사유의 파트너입니다.",
variant: "gemini",
badges: ["Logic", "Thinking"]
},
{
name: "Antigravity.",
role: "The Shipwright",
desc: "설계를 실제 코드로 짓는 선박 목수입니다. 에이전트 기반 워크플로우를 통해 상상을 실체화하고 시스템을 견고하게 완성합니다.",
variant: "antigravity",
badges: ["Build", "Execution"]
}
];
--- ---
// src/pages/ingredients.astro
import BaseLayout from '../layouts/BaseLayout.astro';
import PageTitle from '../components/PageTitle.astro';
import Badge from '../components/Badge.astro';
import { myIngredients, museumItems } from '../data/ingredients';
import Button from '../components/Button.astro';
// Abstract Geometric Markers for System Schematic
const Markers = {
core: `<svg viewBox="0 0 24 24" class="w-6 h-6" fill="currentColor"><circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="3" fill="white"/></svg>`,
module: `<svg viewBox="0 0 24 24" class="w-6 h-6" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="4" y="4" width="16" height="16" rx="1"/></svg>`,
link: `<svg viewBox="0 0 24 24" class="w-6 h-6" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M8 3v18M16 3v18"/></svg>`,
data: `<svg viewBox="0 0 24 24" class="w-6 h-6" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M4 6h16M4 12h16M4 18h16"/></svg>`
};
--- ---
// src/pages/kitchen.astro
import BaseLayout from '../layouts/BaseLayout.astro';
import KitchenHeader from '../components/KitchenHeader.astro';
import KitchenFooter from '../components/KitchenFooter.astro';
import KitchenTitle from '../components/KitchenTitle.astro';
// 파일 트리 데이터
const fileTree = `
matcha-logic/
├── public/
│ ├── admin/ # Decap CMS (config.yml)
│ ├── images/ # Assets
│ └── _redirects # Routing Rules
├── src/
│ ├── components/ # UI Components
│ ├── content/ # Markdown Data
│ ├── layouts/ # Page Shells
│ └── pages/ # Routing Points
└── astro.config.mjs # Configuration
`;
---
main*
Logic Only
UTF-8 Astro Core