This is the source code of my personal website, were you're going to find my projects, who am I, and how to find me.
Powered by Astro
This repository powers a content-first website with:
- a homepage (
/) - a commissions/partnerships experience (
/partnerships) - a markdown-driven blog (
/blogand/blog/[slug]) - a private studio gate and session dashboard (
/studio,/studio/[session])
The project uses Astro for routing/rendering, Svelte for interactive UI, and Tailwind CSS v4 for styling.
- Astro 6
- Svelte 5 (
@astrojs/svelte) - Tailwind CSS 4 +
@tailwindcss/typography - TypeScript
- Node adapter (
@astrojs/node) instandalonemode - Markdown parsing in blog detail pages via
gray-matter+marked
- Node.js
>=22.12.0(enforced inpackage.json) - pnpm (recommended, lockfile is included)
pnpm install
pnpm devThen open http://localhost:4321.
From package.json:
pnpm dev- start local dev serverpnpm build- create production buildpnpm preview- preview the production build locallypnpm astro -- <command>- run Astro CLI commands directly
gxbs.dev/
public/ # static assets (images, favicons, fonts)
src/
components/ # Svelte/Astro UI components
content/blog/ # markdown blog posts
layouts/ # shared Astro layouts
pages/ # file-based routes
styles/global.css # Tailwind import + theme + font faces
utils/ # utility modules
astro.config.mjs # Astro config + Node adapter + Tailwind Vite plugin
svelte.config.js # Svelte preprocess config
src/content.config.ts # content collection schema
Blog posts live in src/content/blog/*.md and are rendered by:
- listing page:
src/pages/blog/index.astro - detail page:
src/pages/blog/[slug].astro
Use this frontmatter shape:
---
title: My Post Title
date: 2026-04-25
tags:
- astro
- svelte
draft: false
---Notes:
draft: trueposts are hidden from/blogand redirected away on detail pages.- The slug is derived from the markdown filename.
Create a local env file before using the commissions form integration:
cat > .env <<'EOF'
VITE_TOKEN=your_telegram_bot_token
EOFThe commissions form (src/components/Commissions.svelte) sends submissions to Telegram using this token.
If you do not set VITE_TOKEN, the partnerships form submission will fail.
src/pages/studio/index.astro: access gate viewsrc/pages/studio/[session].astro: session-based dashboard route (prerender = false)
Current behavior in src/components/studio/StudioDashboard.svelte:
DEV_MODEis set totrue, so mock data is used.- Set
DEV_MODEtofalseto fetch real data fromhttps://api.gxbs.dev/api/studio/${uuid}.
- Global styles:
src/styles/global.css - Typography plugin enabled for rich markdown rendering
- Custom
PPEditorialNew&PPNeueMontrealfont files are loaded frompublic/fonts/
Build for production:
pnpm buildThis project uses the Astro Node adapter in standalone mode (astro.config.mjs), suitable for Node hosting platforms.
Typical deployment flow:
- Install dependencies
- Run
pnpm build - Run the generated Node server output from
dist/
If your platform supports Astro directly, follow its Astro Node adapter deployment docs and point it to this repository.