Skip to content

Commit 36ebaba

Browse files
committed
add initial project files
0 parents  commit 36ebaba

30 files changed

Lines changed: 6866 additions & 0 deletions

.github/workflows/ci.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: CI
2+
3+
on:
4+
pull_request:
5+
push:
6+
branches: [main]
7+
8+
jobs:
9+
verify:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- uses: actions/checkout@v4
13+
14+
# pnpm version comes from the "packageManager" field in package.json
15+
- uses: pnpm/action-setup@v4
16+
17+
- uses: actions/setup-node@v4
18+
with:
19+
node-version: 22
20+
cache: pnpm
21+
22+
# --frozen-lockfile installs exactly from pnpm-lock.yaml; combined with the
23+
# supply-chain policies in pnpm-workspace.yaml this fails the build if the
24+
# lockfile drifts or violates policy.
25+
- run: pnpm install --frozen-lockfile
26+
27+
# Formatting, then content/type validation (invalid project or webring
28+
# entries fail here), then the production build.
29+
- run: pnpm format:check
30+
- run: pnpm check
31+
- run: pnpm build

.gitignore

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# build output
2+
dist/
3+
# generated types
4+
.astro/
5+
6+
# dependencies
7+
node_modules/
8+
9+
# logs
10+
npm-debug.log*
11+
yarn-debug.log*
12+
yarn-error.log*
13+
pnpm-debug.log*
14+
15+
16+
# environment variables
17+
.env
18+
.env.production
19+
20+
# macOS-specific files
21+
.DS_Store
22+
23+
# jetbrains setting folder
24+
.idea/

.npmrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# pnpm 11: pnpm-specific settings live in pnpm-workspace.yaml, not here.
2+
# This file is reserved for auth/registry configuration only.

.prettierrc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"singleQuote": true,
3+
"plugins": ["prettier-plugin-astro", "prettier-plugin-tailwindcss"],
4+
"overrides": [
5+
{
6+
"files": "*.astro",
7+
"options": { "parser": "astro" }
8+
}
9+
]
10+
}

.vscode/extensions.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"recommendations": ["astro-build.astro-vscode"],
3+
"unwantedRecommendations": []
4+
}

.vscode/launch.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"version": "0.2.0",
3+
"configurations": [
4+
{
5+
"command": "./node_modules/.bin/astro dev",
6+
"name": "Development server",
7+
"request": "launch",
8+
"type": "node-terminal"
9+
}
10+
]
11+
}

README.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
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+
```

astro.config.mjs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// @ts-check
2+
import { defineConfig } from 'astro/config';
3+
import tailwindcss from '@tailwindcss/vite';
4+
import icon from 'astro-icon';
5+
6+
// https://astro.build/config
7+
export default defineConfig({
8+
redirects: {
9+
'/': '/projects',
10+
},
11+
integrations: [icon()],
12+
vite: {
13+
plugins: [tailwindcss()],
14+
},
15+
});

package.json

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"name": "showcase",
3+
"type": "module",
4+
"version": "0.0.1",
5+
"packageManager": "pnpm@11.5.0",
6+
"engines": {
7+
"node": ">=22.12.0"
8+
},
9+
"scripts": {
10+
"dev": "astro dev",
11+
"build": "astro build",
12+
"preview": "astro preview",
13+
"astro": "astro",
14+
"check": "astro check",
15+
"format": "prettier --write .",
16+
"format:check": "prettier --check ."
17+
},
18+
"dependencies": {
19+
"@iconify-json/lucide": "^1.2.111",
20+
"@tailwindcss/vite": "^4.3.0",
21+
"astro": "6.4.2",
22+
"astro-icon": "^1.1.5",
23+
"tailwindcss": "^4.3.0"
24+
},
25+
"devDependencies": {
26+
"@astrojs/check": "^0.9.9",
27+
"prettier": "^3.8.3",
28+
"prettier-plugin-astro": "^0.14.1",
29+
"prettier-plugin-tailwindcss": "^0.8.0",
30+
"typescript": "^6.0.3"
31+
}
32+
}

0 commit comments

Comments
 (0)