Bilingual team portfolio with an IDE/terminal UI. Astro 6 + Tailwind CSS 4.
Node.js β₯ 22.12.0
npm install
npm run dev # http://localhost:4321
npm run build # dist/
npm run preview
npm run ci # typecheck, i18n, lint, formatOther scripts: build:pages, validate:i18n, lint:fix, format. Husky runs ci on commit.
Copy .env.example β .env.
| Variable | Purpose |
|---|---|
GITHUB_TOKEN |
GitHub API access (recommended for builds and live stats) |
PUBLIC_WEB3FORMS_ACCESS_KEY |
Contact form (Web3Forms); omitted in dev = mock submit |
FORCE_GITHUB_SYNC |
1 β bypass snapshot cache TTL |
ASTRO_SITE / ASTRO_BASE |
Site URL and path prefix (CI sets these for Pages) |
Build-time GitHub data is cached in .cache/github-snapshot.json; the client can refresh stars, languages, and releases in the browser.
src/
βββ components/ sections, layout, phone mockups
βββ constants/ site, GitHub, DOM ids
βββ data/ projects, translations, mockups, team
βββ integrations/ build hooks (GitHub cache)
βββ pages/ routes (/en, /ru, project detail)
βββ styles/
βββ utils/
Content lives in src/data/ (projects.json, translations.json, project-mockups.json). Branding and org settings: src/constants/site.ts, src/constants/github.ts.
Routes: /en/ and /ru/ (/ β /en/). UI strings: src/data/translations.json. Check keys with npm run validate:i18n.
.github/workflows/deploy.yml builds on push to main/master (and daily cron) and publishes to GitHub Pages via Actions.
- Settings β Pages β Source: GitHub Actions
- Optional repo secrets:
PUBLIC_WEB3FORMS_ACCESS_KEY GITHUB_TOKENis provided in Actions automatically
Local Pages smoke: npm run build:pages.
Open source β darkmoonight.