A production-ready static website for Security and Artificial Intelligence Lab (SAIL) at VinUniversity.
The site is built with Astro, TypeScript, and Tailwind CSS. It is designed as a dark, minimal, editorial research lab website with placeholder visuals that can be replaced later.
- Astro
- TypeScript
- Tailwind CSS v3 via
@astrojs/tailwind - Static output only
- GitHub Pages deployment through GitHub Actions
- No backend
- No CMS
- No analytics or tracking
Install dependencies:
npm installRun locally:
npm run devBuild for production:
npm run buildPreview the production build:
npm run previewMost content lives in src/data.
| File | Purpose |
|---|---|
src/data/site.ts |
Lab name, site URL, address, social placeholders |
src/data/nav.ts |
Main navigation |
src/data/news.ts |
News strip and news archive |
src/data/team.ts |
Professors, students, RAs, alumni, collaborators |
src/data/publications.ts |
Accepted papers and arXiv papers |
src/data/research.ts |
Research pillars |
src/data/projects.ts |
Project cards and project figures |
src/data/gallery.ts |
Gallery panels |
The website currently uses geometric placeholder components and placeholder logo files.
Recommended folders:
public/team/
public/projects/
public/gallery/
After adding real images, update the matching data files and components to use the new image paths.
The private registration form uploads member portraits to Supabase Storage bucket:
member-photos
Run docs/SUPABASE_MEMBER_PHOTOS_STORAGE.sql once in the Supabase SQL Editor before testing registration uploads. The form accepts JPG, PNG, and WebP source images up to 12 MB, lets the user crop to a 1:1 portrait, uploads the cropped 800x800 JPG, then stores the public Storage URL in lab_members.image_url.
The publications page is intentionally simple and does not include a paper search tool.
Current rules:
- Only include publications that list Prof. Kok-Seng Wong as an author.
- Put published or accepted papers in
Accepted Papers. - Put unaccepted preprints in
arXiv Papers. - Once an arXiv preprint is accepted, move it to
Accepted Papersand remove it from the arXiv tab. - Do not duplicate a work across both tabs.
This project is configured for:
https://www.sail-research.com
The canonical repository is:
https://github.com/sail-research/sail-research.github.io
Because the site is served from the domain root, astro.config.mjs sets:
site: 'https://www.sail-research.com'and does not set base.
To deploy:
- Push source changes to the
mainbranch. - Run
npm run build. - Go to repository Settings → Pages.
- Set the source to the
gh-pagesbranch. - Publish the generated
dist/directory togh-pages, keepingCNAMEin the deployed output.
The GitHub Pages custom domain is already configured as:
www.sail-research.com
Current domain requirements:
- Keep
public/CNAMEset towww.sail-research.com. - Keep
baseunset inastro.config.mjs. - Keep
public/robots.txtsitemap URL on the custom domain.
If the repository is not the special sail-research.github.io repo, for example:
https://github.com/sail-research/sail-website
then the GitHub Pages URL will usually be:
https://sail-research.github.io/sail-website/
In that case, update astro.config.mjs:
site: 'https://sail-research.github.io',
base: '/sail-website'You must also make sure internal links work with the configured base. The current version is optimized for sail-research.github.io with the www.sail-research.com custom domain.
Seed content was checked against public SAIL/VinUniversity pages, arXiv records, and official Astro deployment docs. See docs/DATA_SOURCES.md for details.
- Home, Team, Publications, Research, Projects, Gallery, News, and 404 pages are included.
- No Vacancies page or navigation link.
- No paper search tool.
- No analytics or tracking.
- All visuals are placeholders.
- The Professors section contains only Prof. Kok-Seng Wong.
- Publications are filtered to entries that include Prof. Kok-Seng Wong.
- Projects page exists and every project has a placeholder figure.
- Gallery uses a panel/masonry-style layout.