Personal website and portfolio for Dao Quang Truong. Built with Astro, React, and Tailwind CSS, and published around the truongsoftware.com brand.
Architecture diagrams (PlantUML) and feature companions live under docs/. See the Feature architecture index for content collections, API map, search, contact, and payments.
- π docs/DOMAIN_MIGRATION.md β Canonical domain (
truongsoftware.com), nginx/DNS checklist - π docs/REPO_HYGIENE.md β Ignored paths, dependency notes, disabled routes
- π CONTENT_TEMPLATES.md - Template index (start here)
- π€ AI_AGENT_INSTRUCTIONS.md - AI agent usage guide
- π TEMPLATES_JOURNAL.md - Journal entry templates
- π TEMPLATES_BLOG.md - Blog post templates
- π JOURNAL_RULES.md - Journal generation rules
- Marketing homepage and portfolio sections
- Blog, journal, and evergreen content pages
- Public utility routes for contact, search, certificates, and experiments
- Static assets including the downloadable CV
# Install dependencies
bun install
# Development
bun run dev
# Build production
bun run build
# Preview build
bun run previewportfolio/
βββ π Documentation
β βββ CONTENT_TEMPLATES.md β Template index
β βββ AI_AGENT_INSTRUCTIONS.md β AI agent guide
β βββ TEMPLATES_JOURNAL.md β Journal templates
β βββ TEMPLATES_BLOG.md β Blog templates
β βββ JOURNAL_RULES.md β Generation rules
β
βββ src/
β βββ content/
β β βββ journal/ β Daily logs & summaries
β β βββ blog/ β Blog posts
β βββ components/ β React & Astro components
β βββ pages/ β Routes
β βββ layouts/ β Page layouts
β βββ hooks/ β Custom hooks
β βββ lib/ β Utilities & config
β βββ styles/ β Global styles
β
βββ scripts/
β βββ generate-journal-summaries.ts β Summary generator
β
βββ public/ β Static assets
# Auto-generate summaries
bun run journal:summary
# Force generate specific period
bun run journal:summary:force-week
bun run journal:summary:force-month
bun run journal:summary:force-quarter
bun run journal:summary:force-yearbun run lint # ESLint check
bun run lint:fix # Fix issues
bun run content:validate # Zod frontmatter vs blog/journal/courses (also runs in `bun run verify`)| Type | Frequency | Template |
|---|---|---|
| Daily | Every day | TEMPLATES_JOURNAL.md |
| Weekly | Sunday | TEMPLATES_JOURNAL.md |
| Monthly | 1st of month | TEMPLATES_JOURNAL.md |
| Quarterly | 1st of Q | TEMPLATES_JOURNAL.md |
| Yearly | Dec 31 | TEMPLATES_JOURNAL.md |
| Type | Purpose | Template |
|---|---|---|
| Case Study | Project experience | TEMPLATES_BLOG.md |
| Advanced Patterns | Technical deep dive | TEMPLATES_BLOG.md |
| Reflection | Personal insights | TEMPLATES_BLOG.md |
| Tutorial | How-to guides | TEMPLATES_BLOG.md |
- Framework: Astro 6.x
- UI: React 19, TailwindCSS 4.x
- Animation: Framer Motion
- Diagrams: Mermaid.js
- AI: OpenAI-compatible integrations and local experiments
- Database: Content Collections
- Deployment: Cloudflare Pages
- All content in English
- Technical terms remain in English
- Professional yet approachable tone
- Journal:
YYYY-MM-DD-type-slug.md - Blog:
topic-descriptor.md - Always kebab-case
- Follow schema exactly as defined in templates
- All required fields must be present
- Use proper YAML syntax
<Callout type="info">
Important information here
</Callout>
<Mermaid>
graph TD
A --> B
</Mermaid>import { ExperienceClient } from '@/components/Experience.client';
import { AIAssistant } from '@/components/AIAssistant';bun run build
bun run preview # Test locally- Deploy to Cloudflare Pages
- Configure KV bindings for sessions
- Set environment variables
When generating content:
- Read
AI_AGENT_INSTRUCTIONS.mdfor workflows - Choose appropriate template from
TEMPLATES_JOURNAL.mdorTEMPLATES_BLOG.md - Follow frontmatter schema exactly
- Use English throughout
- Check quality checklist before finalizing
Contact form (Telegram) β set on the server only (never PUBLIC_* for the bot token). The homepage form calls POST /api/contact, which reads:
TELEGRAM_BOT_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=your_chat_idFor local development, add these to .env so the Astro dev server can pass them to API routes.
Edit src/lib/config.ts for:
- Personal info
- SEO settings
- UI strings
- Work experience
- Projects
- GitHub identity and social links
- Canonical production URL:
https://truongsoftware.com - CV asset path:
public/Dao_Quang_Truong_CV.pdf - Profile repo for GitHub homepage:
truongnat/README.md
When adding new content:
- Use appropriate template
- Build project to verify
- Check for consistency
- Commit with descriptive message
MIT License - Copyright Β© Dao Quang Truong
Last Updated: 2026-07-05