Personal website and engineering blog built with Astro, React, and TypeScript.
The site powers szelenberger.pl and combines a content-driven blog with a few custom interactive pieces, including a small arcade page hidden inside the project.
- Astro 5
- React 19
- TypeScript
- Astro Content Collections
@astrojs/sitemap
- Homepage with recent writing and archive highlights
- Blog posts generated from Markdown content
- Markdown-based static pages such as
AboutandStack - Client-side React components where interactivity is needed
- Sitemap generation for the production site
- Small canvas-based
Arcanoidpage
- Node.js 18+ recommended
- npm
npm installnpm run devThe Astro dev server will start locally and watch content and component changes.
npm run dev- start the Astro development servernpm run start- alias fornpm run devnpm run build- create a production build indist/npm run preview- preview the production build locallynpm run check- run Astro and TypeScript checks
.
|-- public/ Static assets
|-- src/
| |-- components/ React UI and interactive components
| |-- content/ Blog posts and draft content
| |-- layouts/ Astro layouts
| |-- pages/ Route entry points and Markdown pages
| `-- styles/ Global and page-specific styles
|-- docs/ Project notes
|-- astro.config.mjs Astro configuration
|-- package.json Scripts and dependencies
`-- techstack.* Personal stack reference files
Content collections are defined in src/content.config.ts.
blogcontains published posts withtitle,date,permalink, and optionalcategoriesdraftscontains work-in-progress entries withtitle,date, and optionalcategories
Published blog entries live in src/content/blog/ and are rendered into archive and post pages.
This project is configured with the production site URL https://szelenberger.pl in astro.config.mjs.
To create a deployable build:
npm run buildThe generated output is written to dist/.