|
| 1 | +# CCSS Showcase |
| 2 | + |
| 3 | +A student-built **project showcase + webring** for the Carleton Computer Science Society. Students submit a project (a tile linking to a detail page) or add their personal site to the webring — all via pull request, no backend. |
| 4 | + |
| 5 | +> ⚠️ **Under active development.** The site is being built by CCSS volunteers and isn't open for project/webring submissions yet. |
| 6 | +
|
| 7 | +## Overview |
| 8 | + |
| 9 | +Two things live here: |
| 10 | + |
| 11 | +- **Project Directory** (`/projects`) — a gallery of projects built by Carleton CS |
| 12 | + students. |
| 13 | +- **Webring** (`/webring`) — a directory of students' personal sites, linked into a ring. Members embed a small widget that connects their site to the |
| 14 | + others. |
| 15 | + |
| 16 | +It's a static site (no server, no database): contributions are files added via a PR, and the build validates them. |
| 17 | + |
| 18 | +**Stack:** [Astro 6](https://astro.build) · TypeScript · [Tailwind CSS |
| 19 | +v4](https://tailwindcss.com) · pnpm. |
| 20 | + |
| 21 | +## Adding a project |
| 22 | + |
| 23 | +🚧 **Coming soon.** |
| 24 | + |
| 25 | +## Joining the webring |
| 26 | + |
| 27 | +🚧 **Coming soon.** |
| 28 | + |
| 29 | +## Development |
| 30 | + |
| 31 | +### Prerequisites |
| 32 | + |
| 33 | +- **Node.js** `>=22.12.0` |
| 34 | +- **pnpm** `11.x` — this repo pins the version via the `packageManager` field; the easiest way to match it is Corepack: |
| 35 | + |
| 36 | + ```sh |
| 37 | + corepack enable |
| 38 | + ``` |
| 39 | + |
| 40 | +### Setup |
| 41 | + |
| 42 | +```sh |
| 43 | +git clone https://github.com/CarletonComputerScienceSociety/showcase.git |
| 44 | +cd showcase |
| 45 | +pnpm install |
| 46 | +``` |
| 47 | + |
| 48 | +### Commands |
| 49 | + |
| 50 | +| Command | What it does | |
| 51 | +| ------------------- | ----------------------------------------------- | |
| 52 | +| `pnpm dev` | Start the dev server at `localhost:4321` | |
| 53 | +| `pnpm build` | Production build to `./dist/` | |
| 54 | +| `pnpm preview` | Preview the production build locally | |
| 55 | +| `pnpm check` | Type- and content-validate (`astro check`) | |
| 56 | +| `pnpm format` | Format all files with Prettier | |
| 57 | +| `pnpm format:check` | Check formatting without writing (what CI runs) | |
| 58 | + |
| 59 | +### What to run when |
| 60 | + |
| 61 | +- While working: `pnpm dev`. |
| 62 | +- **Before opening a PR:** run `pnpm format`, then `pnpm check`, then `pnpm build`. CI runs `format:check`, `check`, and `build` on every PR and fails if any don't pass — so a quick local pass keeps CI green. |
| 63 | + |
| 64 | +### Heads up: package cooldown |
| 65 | + |
| 66 | +This repo uses pnpm's `minimumReleaseAge` (a 7-day supply-chain cooldown, set in `pnpm-workspace.yaml`). If `pnpm install` ever rejects a brand-new package |
| 67 | +version, **that's the cooldown working as intended, not a broken lockfile.** |
| 68 | +Wait for the version to age out, or pin a slightly older one. If you need an install that's blocked, flag it to Jacc first. |
| 69 | + |
| 70 | +## Project structure |
| 71 | + |
| 72 | +```text |
| 73 | +src/ |
| 74 | +├── content/ |
| 75 | +│ ├── projects/ # one folder per project (index.md + cover image) |
| 76 | +│ └── webring/ # one JSON file per webring member |
| 77 | +├── components/ # Header, Footer, Card, CardCover, RingGraph, … |
| 78 | +├── layouts/Base.astro # document shell (head, header, slot, footer) |
| 79 | +├── pages/ # routes: /projects, /projects/[slug], /webring |
| 80 | +├── styles/global.css # Tailwind v4 + Carleton design tokens |
| 81 | +└── content.config.ts # content collection schemas (the PR validation contract) |
| 82 | +tickets/ # volunteer task write-ups |
| 83 | +``` |
0 commit comments