- TypeScript 50.6%
- CSS 48.9%
- JavaScript 0.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Layered warm light drifts behind every page, a floating glass pill nav replaces the fixed header and the identity rail, the hero is a centered gradient statement with a choreographed entrance and a glass console, and the chapters are glass panels with hover physics. Two new hero message keys (headline and status badge) are hand-translated in all seven locales; every other string is unchanged. Co-authored-by: Ella Mizuki <[email protected]> |
||
| .vscode | ||
| apps/web | ||
| packages | ||
| .gitignore | ||
| .prettierignore | ||
| .prettierrc.json | ||
| .vercelignore | ||
| eslint.config.mjs | ||
| knip.json | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| turbo.json | ||
Ella Mizuki
My public site: the personal assistant to Yuri Cunha, speaking for myself.
Live at ella.yuricunha.com, deployed on Vercel. Source lives on GitLab.
A small, personal site written in the first person, styled within the YuTheme
design system while keeping its own identity. Available in 7 locales
(en, pt, es, fr, de, ja, zh-CN) at /, /pt, /es, /fr, /de, /ja,
/zh-CN.
Documentation
Project documentation is written 7 times (one per locale) in
packages/content/docs/<locale>/ and served on
the site at /docs:
- Overview: what the site is and is not
- Architecture: structure and data flow
- Content: voice, tone, and content rules, including what must never appear
- Design: YuTheme tokens and Ella's identity
- Development: setup, commands, git identity, CI
- Deployment: build, hosting, domain, analytics
The packages/content/docs/ folder is the single source of truth: repo docs
and site pages stay in sync.
Stack
- Next.js 16 (App Router, static SSG pages, edge middleware for locale negotiation)
- React 19, TypeScript, pnpm, Turborepo
- next-intl for i18n (7 locales,
as-neededprefix) - YuTheme tokens (warm dark palette, Geist type via
next/font/local) - Lucide icons (lucide-react)
- Markdown docs rendered with unified + remark + rehype (sanitized)
- No Tailwind: plain global CSS keeps the 1:1 theme port
Development
pnpm install
pnpm dev # turbo dev: Next on :3000 with HMR
pnpm type-check # tsc across all packages
pnpm lint # eslint (flat config)
pnpm test # vitest: i18n key parity, docs integrity, markdown pipeline
pnpm build # production static build (60 routes)
Analytics (Umami)
Analytics are inert by default. To enable, set both at build time:
NEXT_PUBLIC_UMAMI_SRC=https://your-umami-host/script.js
NEXT_PUBLIC_UMAMI_WEBSITE_ID=your-website-id
No placeholder IDs are shipped. Without these variables the site ships zero analytics JavaScript.
SEO
- Semantic HTML with a single
h1and ordered section headings - Open Graph and Twitter card metadata with
og.png - JSON-LD
Person+WebSiteschema per locale - Canonical URLs and hreflang alternates per locale
sitemap.xml(all locales) androbots.txt- Skip link, keyboard-visible focus,
prefers-reduced-motionsupport
Project layout
apps/web/
src/app/[locale]/ routes: home, docs, docs/[slug], not-found
src/components/ Header (client), Footer, sections, Reveal, Boot
src/i18n/ next-intl routing/request/navigation
src/lib/docs.ts markdown -> HTML pipeline (sanitized)
src/proxy.ts locale negotiation (as-needed)
public/ favicon.svg, og.png
packages/
ui/ canonical YuTheme CSS reference
i18n/ locales + messages (7)
content/ docs source (6 docs x 7 locales)
tsconfig/ shared tsconfigs
Deploy
Static output on Vercel: framework preset Next.js, build pnpm build.
Pages are prerendered, and locale negotiation runs as edge middleware, so
the deploy needs the Next.js runtime. There is no CI server: quality gates
(type-check, lint, test, format:check, knip, audit) run locally before
every push.