Made possible with the contributions of the BOSC community. 🚀
All commands are run from the root of the project, from a terminal:
| Command | Action |
|---|---|
npm install |
Installs dependencies |
npm run dev |
Starts local dev server at localhost:4321 |
npm run build |
Build your production site to ./dist/ |
npm run preview |
Preview your build locally, before deploying |
Feel free to check Contribution Methods and follow Code of Conduct before contributing.
Make sure that Prettier is installed in your text editor. Prettier alone will not format Astro files correctly, so add this to your VS Code settings.json (the npm plugins are already handled by devDependencies):
{
"prettier.documentSelectors": ["**/*.astro"],
"[astro]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}Also install the Astro extension by opening the VS Code command palette (Ctrl+P) and running:
ext install astro-build.astro-vscode
Heads up for dev mode: The search bar won’t magically work until you build the site first. Don’t worry npm postinstall takes care of an initial build right after installing. But if you add new content, you’ll need to run npm run build again so it gets indexed.
Want the geeky details? Check out astro-pagefind
If you do not find the issue you are looking for, please create a new issue after reviewing our website.
This project is licensed under the MIT License - see the LICENSE file for details
- Astro documentation.
npm run astro ...Run CLI commands likeastro add,astro checknpm run astro -- --helpGet help using the Astro CLI
The site is built with Astro and Tailwind CSS.
.
├── .github/ # Issue and pull request templates
├── public/ # Static assets served as-is (images, icons, logos)
│ ├── brand/ # Logo variants and the downloadable brand kit
│ ├── blogs_assets/<post>/ # Images for a blog post; folder name matches the post's file name
│ ├── events/<id>/ # Event photos; <id> matches the event id in src/data/events.json
│ └── team/, mentors/, ... # Profile pictures and other images
├── src/
│ ├── components/ # Reusable Astro components
│ │ ├── Cards/ # Card components (articles, events, members, ...)
│ │ ├── Icons/ # SVG icon components
│ │ └── TopEvent/ # Sections of the home page "events" block
│ ├── content/
│ │ └── blog/ # Blog articles in Markdown
│ ├── data/ # JSON data (events, team, notes, opportunities, ...)
│ ├── layouts/
│ │ └── Layout.astro # Base HTML layout used by every page
│ ├── pages/ # File-based routes (see below)
│ ├── styles/ # Global styles and theme tokens
│ ├── utils/ # Helper functions
│ └── content.config.ts # Content collection schema for blog articles
├── astro.config.mjs
└── tailwind.config.mjs # Brand colors, breakpoints and fonts
| Route | Source |
|---|---|
/ |
src/pages/index.astro |
/about |
src/pages/about.astro |
/explore/<section> |
src/pages/explore/*.astro |
/explore/article/<slug> |
src/content/blog/*.md |
/explore/events/<id> |
src/data/events.json |
/notes/<faculty>/<semester> |
src/data/notes-<faculty>.json |
/internships |
src/data/internships.json |
/mentorship |
src/pages/mentorship/ |
/brand |
src/pages/brand.astro (logos in public/brand/) |
/privacy |
src/pages/privacy.astro |
/blogs/... |
Legacy URLs that redirect to /explore/... |
- Blog article: add
src/content/blog/<slug>.mdusing kebab-case for the file name. The frontmatter fields (title,pubDate,author,authImage,coverImage,slug,summary,type) are validated bysrc/content.config.ts. Put images inpublic/blogs_assets/<slug>/and reference them with site-absolute paths such as/blogs_assets/<slug>/cover.png. Do not prefix paths with/public. - Event: add an entry to
src/data/events.jsonand put its photos inpublic/events/<id>/. - Member, executive or alumni: edit
src/data/team.json. - Opportunity: add an entry to
src/data/opportunities.json. Link only to the official page, describe only what that page says, and setlastVerifiedto the date you checked it.deadline(optional,YYYY-MM-DD) floats the card to the top until that date passes. - Notes: each program has
src/data/notes-<program>.jsonwith its officialcurriculumlink,studySitesand per-coursepastQuestionsLink/notesLink. Free courses and books are matched to courses by name throughsrc/data/learning-resources.json, so add a topic and arulespattern there instead of repeating links per course. - Constitution and other club documents: edit the Markdown in
src/content/documents/.
- Use the brand colors from
tailwind.config.mjs:lime-500for accents andzinc-900for primary buttons. They extend Tailwind's default palette, so standard utilities also work. - Pages under
/exploreuse the CSS theme tokens (--text-color,--text-muted, ...) defined insrc/styles/global.css.