Introduction

Overview of dung87.io.vn — personal hub and project directory

About dung87.io.vn

dung87.io.vn is a personal hub — a homepage that doubles as a directory of standalone subdomain projects. Each project lives at its own subdomain (e.g. mbti.dung87.io.vn, blog.dung87.io.vn, cv.dung87.io.vn).

Unlike a traditional portfolio that lists everything on a single site, this hub points outward — it lists projects like a directory, and each click takes you to an independent subdomain.

Key features

  • 🎨 Dark theme#0F0F13 background + coral #FF6B81 accent, glass-morphism cards, animated gradient orbs.
  • 🌐 Bilingual vi / en — vi at /, en at /en. Switcher in header. Full hreflang tags for SEO.
  • 📂 Project directory — data from src/data/projects.json. Each project has status (live / coming_soon / ideating / archived).
  • 🔍 Skill filter — click skill tag to filter grid by tech. URL persists ?skill=react for sharing.
  • 📅 Now timeline — short “what I’m doing” log, latest 3 entries from src/data/now.json.
  • 🏷️ Tags + tech — each project has tags (user-facing category) + tech (stack). Flexible sort/filter.
  • 🚀 Lazy favicon — live cards auto-load favicon from the subdomain to prove liveness.
  • Accessibility — skip-link, ARIA roles, focus rings, prefers-reduced-motion guard.
  • Fast — ~50KB HTML, ~3KB inline JS. Lighthouse mobile ≥95.
  • 🤖 Auto CI/CD — GH Actions validate → build → deploy on push.
  • 📋 Daily healthcheck — cron workflow probes every live subdomain, opens issue on failure.

Tech stack

LayerChoice
Static site generatorAstro 5 (output: "static")
StylingTailwind CSS 3 via @astrojs/tailwind
Type systemTypeScript (strict)
Data validationZod (runtime + build-time)
DeploymentCloudflare Pages (free tier)
DNSCloudflare (zone dung87.io.vn)
CI/CDGitHub Actions (CI + Deploy + Healthcheck)
Node20+ (see .nvmrc)

Current subdomains

SubdomainStatusStackDescription
mbti.dung87.io.vn🟢 LiveReact + TypeScript + ViteMBTI Personality Test — 16 personality types
blog.dung87.io.vn🟡 Coming soonAstro + MDXPersonal blog — dev & tools notes
lab.dung87.io.vn🟣 IdeatingPlayground for small experiments
cv.dung87.io.vn🟣 IdeatingAstroWeb-based CV / resume

Always-up-to-date list: see CLAUDE.md on GitHub.

Architecture

┌──────────────────────────────────────────────────┐
│ GitHub: vuhuudung/dung87.io.vn                  │
│   └─ push to main                                │
│       ↓                                          │
│   GitHub Actions: deploy.yml                     │
│       ├─ npm ci                                  │
│       ├─ npm run validate                        │
│       ├─ npm run check-claude-md                 │
│       ├─ npm run build                           │
│       └─ cloudflare/pages-action@v1              │
│              ↓                                   │
│   Cloudflare Pages project 'dung87-io-vn-hub'    │
│       ├─ Custom domain: dung87.io.vn             │
│       ├─ Custom domain: www.dung87.io.vn         │
│       └─ Auto SSL                                │
│              ↓                                   │
│   https://dung87.io.vn/* (CDN-cached, fast)      │
└──────────────────────────────────────────────────┘

Next: