This repository holds the source code for the BLISS Website.
Big thanks to our befriended AI student organisation AITU team for open-sourcing their webpage code, which served as the foundation of this website.
The project is built with Astro and follows a minimal setup, using native HTML, CSS, and JS/TS (in .astro files) as much as possible. Key packages:
- Tailwind CSS v4 for styling, integrated via the
@tailwindcss/viteplugin (seeastro.config.mjs) - @astrojs/react for the interactive event-timeline components
- WebGL 2 (custom shaders in
src/lib/background-webgl.ts) for the homepage particle background - @fontsource/righteous for the landing display font
- @astrojs/vercel as the deployment adapter (static output on Vercel)
/
├── public/ # static assets served as-is (favicons, /assets, webmanifest)
├── src/
│ ├── components/ # .astro / .tsx components (incl. events/ and newsletter/)
│ │ └── data/ # event, speaker, workshop, paper, and member data
│ ├── layouts/ # Layout.astro (site) and Newsletter.astro (email)
│ ├── lib/ # background-webgl.ts, event-scroll.ts
│ ├── pages/ # routes (index, speaker-series, reading-group, workshops, …)
│ └── global.css # Tailwind entry + custom utilities
├── astro.config.mjs
└── package.json
Event content (speakers, workshops, reading-group papers, community events) lives in src/components/data/ and is rendered into a shared timeline via src/components/events/. There is no blog.
Requires Node.js 22.x (see engines in package.json). The project uses yarn (a yarn.lock is committed and used by Vercel).
git clone https://github.com/bliss-e-v/webpage
cd webpage
yarn install
yarn dev # start the dev server at http://localhost:4321Common scripts:
| Command | Description |
|---|---|
yarn dev |
Start the local dev server (http://localhost:4321) |
yarn build |
Build the static site into dist/ (and .vercel/output) |
yarn preview |
Preview the production build locally |
yarn newsletter |
Build the site and generate newsletter.html from the /newsletter route (inlines CSS/SVGs via generate_final_newsletter.cjs) |
For changes, branch off main (feat/<name> or fix/<name>), commit with descriptive messages, and open a pull request. Deployment to Vercel happens automatically on merge; a daily GitHub Actions cron also redeploys to refresh time-sensitive event content.
New static images in public/assets/ should be compressed (aim for < 150 KB); prefer .webp/.jpg.