No description
Find a file
2026-03-16 15:27:37 -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 trying to properly model models 2026-01-21 15:18:03 -05: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 make the site work and small fixes 2026-03-16 15:27:37 -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 the prod backend to get a list of all hackclub stickers in JSON, prod backend is https://fccg0c4s0kcggwk0k4s8wggc.a.selfhosted.hackclub.com. Please don't hammer it to hard, let us know what you're up to and we can help you coexist within the rate limit. Locally the backend is ran 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 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 sensitive data, 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.