Personal portfolio + RU/EN blog built with Astro and deployed to GitHub Pages.
Live site: rebsem.ru
- Astro 5
- MDX (
astro:content) - TypeScript
- GitHub Actions + GitHub Pages
- RU/EN locale toggle with persistent preference
- Light/dark theme toggle
- Smooth client-side navigation
- Bilingual blog posts (translation pairs)
- Live GitHub profile/public repo sync with build-time contribution snapshots
robots.txt,sitemap.xml,llms.txt, meta tags, structured data
/- landing page/about- profile/about page/blog- blog index/blog/:slug- blog post/posts- redirect/compat route/api/github/profile.json- generated static JSON/api/github/repos.json- generated static JSON/api/github/contributions.json- generated static JSON
Requirements:
- Node.js 20+
- npm 10+
npm install
npm run devOpen http://localhost:4321.
npm run buildPreview locally:
npm run previewnpm run check
npm test
npm run build
npm run link-checkFull pre-merge workflow: docs/workflow.md
Create a new RU/EN draft pair:
npm run new:post -- my-post-slug --title-ru "Заголовок" --title-en "Title"Detailed guide: docs/blog-authoring.md
- Workflow:
docs/workflow.md - Blog authoring:
docs/blog-authoring.md - Content plan:
docs/content-plan.md - Deep positioning audit (RU):
docs/rebsem-audit-2026-04.md
See .env.example.
GITHUB_TOKEN- optional token for higher GitHub API rate limits during local build/previewGITHUB_CACHE_FILE- local cache file path (default:.cache/github-cache.json)
This repository deploys via GitHub Actions workflow:
- Workflow:
.github/workflows/deploy.yml - Trigger: push to
main - Custom domain:
rebsem.ru(viapublic/CNAME)
CI for PRs and branch validation lives in .github/workflows/ci.yml.
This project was originally bootstrapped from the website code of Peter Steinberger (steipete) and then adapted/modified for this portfolio.
Reference repository:
If you reuse this repository, keep attribution for upstream code where applicable.
Code in this repository is licensed under the MIT License (LICENSE).
Content (texts, images, media) is licensed separately under LICENSE-CONTENT unless otherwise noted.
Portions of the code are derived from Peter Steinberger's site code and remain subject to the MIT license terms and attribution notice.
- Repository code: MIT (
LICENSE) - Portfolio/blog content and media authored for this site: All Rights Reserved (
LICENSE-CONTENT) - Third-party content/assets (if any): keep original license/attribution requirements