This is my personal website and portfolio, built for darwinmanalo.com. I use it to share selected projects, write technical articles, and give a clearer picture of how I think about software, product work, and engineering.
I wanted the site to feel simple, readable, and fast, while still leaving room for motion, multilingual support, and richer long-form content.
This is my v1.0.0 release. ๐
The website currently includes:
- a homepage with animated hero text
- a projects section with detailed case studies
- an articles section for long-form technical writing
- an about page
- a not found page
- dark mode
- multilingual support
I built this site with:
- React 19
- React Router 7
- Vite 6
- Tailwind CSS 4
- Framer Motion
- i18next and react-i18next
- ESLint 9
- GitHub Actions for deployment
The site supports these languages:
- ๐บ๐ธ English
- ๐ฏ๐ต Japanese
- ๐ฐ๐ท Korean
- ๐จ๐ณ Chinese
- ๐ช๐ธ Spanish
- ๐ฎ๐ฉ Indonesian
- ๐ฉ๐ช German
- ๐ท๐บ Russian
- ๐ซ๐ท French
- ๐ต๐น Portuguese
- ๐ธ๐ฆ Arabic
Translation files live in src/locales, and I load language bundles on demand.
The main routes are:
//projects/projects/:projectId/about/articles/articles/:articleId
.
โโโ public/ # static assets, favicons, 404 page, CNAME
โโโ src/
โ โโโ components/ # page components and shared UI
โ โโโ constants/ # shared UI constants
โ โโโ data/ # project/article metadata
โ โโโ data/article-content # per-article content modules
โ โโโ i18n/ # i18n bootstrap and language loading
โ โโโ locales/ # translation JSON files
โ โโโ utils/ # helper utilities
โ โโโ App.jsx
โ โโโ index.css
โ โโโ main.jsx
โโโ .github/workflows/ # deployment workflow
โโโ index.html
โโโ vite.config.js
โโโ package.json
npm installnpm run devnpm run buildnpm run previewnpm run lintThe site is deployed through GitHub Pages using .github/workflows/deploy.yml.
On every push to main, the workflow:
- installs dependencies with
npm ci - builds the app with
npm run build - uploads the
dist/output - deploys the result to GitHub Pages
The custom domain is:
darwinmanalo.com
- Tailwind CSS 4 is configured through
src/index.css - Google Fonts are loaded in
index.html - Icons are rendered through
src/components/Icon.jsx
I spent time keeping the site reasonably fast, especially on slower network profiles.
Some of the improvements currently in place:
- lazy-loaded route components
- on-demand locale loading instead of bundling every language up front
- per-article content splitting so article detail pages only load the article being viewed
- local SVG icons instead of an icon font
- lighter startup payload for content and translations
- Current version:
1.0.0 - License:
MIT