No description
Find a file
2026-03-16 15:45:13 -07:00
app feat: landing page first draft 2025-12-06 01:13:42 -05:00
backend make the site work and small fixes 2026-03-16 15:27:37 -07:00
src make the site work and small fixes 2026-03-16 15:27:37 -07:00
static feat: project structure 2025-12-05 18:49:31 -05:00
.dockerignore update dockercompose 2025-12-12 20:28:31 -05:00
.env.example make the site work and small fixes 2026-03-16 15:27:37 -07:00
.gitignore make the site work and small fixes 2026-03-16 15:27:37 -07:00
.npmrc feat: project structure 2025-12-05 18:49:31 -05:00
docker-compose.yml docker update and read me update 2026-03-16 15:45:13 -07:00
Dockerfile sure whatever 2026-01-21 15:18:39 -05:00
package-lock.json fix 2026-01-22 14:19:40 -05:00
package.json ready to deploy 2025-12-12 13:16:17 -05:00
pnpm-lock.yaml make the site work and small fixes 2026-03-16 15:27:37 -07:00
README.md docker update and read me update 2026-03-16 15:45:13 -07:00
svelte.config.js ready to deploy 2025-12-12 13:16:17 -05:00
tsconfig.json feat: project structure 2025-12-05 18:49:31 -05:00
vite.config.ts auth guard 2025-12-10 10:41:08 -05:00

Hack Club flag

stickers.hackclub.com

Hack Club logo

The Svelte and Ruby codebase powering stickers.hackclub.com


Hack Club Stickers

Every Hack Clubber gets free, high-quality stickers. Completing programs and attending hackathons can earn more event-specific merch!

Features

  • Trade stickers with other Hack Clubbers
  • Browse an archive of all printed Hack Club stickers
  • Submit new sticker designs
  • Vote on your favourite designs
  • Hack to earn monthly sticker shipments
  • Use as an API for sticker designs

Contributing

To spin up the codebase

git clone https://github.com/hackclub/stickers
cp .env.example .env
pnpm install
pnpm run dev

In a separate terminal cd backend cp .env.example .env Edit .env bundle config set --local path 'vendor/bundle' bundle install bundle exec rackup config.ru -p 9292

API Usage

You can use stickers.hackclub.com/api/ to get a list of all Hack Club stickers in JSON. Please don't hammer it too hard — let us know what you're up to and we can help you coexist within the rate limit. Locally the backend runs on port 9292 and exposes the following endpoints:

Authentication

  • GET /auth/login - Redirects to OIDC provider for login
  • GET /auth/oidc/callback - OAuth callback handler
  • GET /auth/logout - Clears session and logs out
  • GET /auth/me - Returns current authenticated user (requires auth)

Stickers

  • GET /stickers - List all visible stickers
  • GET /stickers/:id - Get sticker details (requires auth)

Designs

  • GET /designs - List current user's designs (requires auth)
  • GET /designs/all - List all designs (requires auth)
  • POST /designs - Submit a new design (requires auth)
  • POST /designs/:id/vote - Toggle vote on a design (requires auth)

Shop

  • GET /shop - List all shop items
  • GET /shop/:id - Get shop item details

Our Airtable has no passwords or secrets — if you want a read-only personal access token scoped to the base we can provide it! In general we're happy to help you over DM, but please have a glance over the code first!

Made with <3 by nora, euan, and end.