No description
Find a file
dependabot[bot] 20e57befa3 Bump rack from 3.2.5 to 3.2.6 in the bundler group across 1 directory
Bumps the bundler group with 1 update in the / directory: [rack](https://github.com/rack/rack).


Updates `rack` from 3.2.5 to 3.2.6
- [Release notes](https://github.com/rack/rack/releases)
- [Changelog](https://github.com/rack/rack/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rack/rack/compare/v3.2.5...v3.2.6)

---
updated-dependencies:
- dependency-name: rack
  dependency-version: 3.2.6
  dependency-type: indirect
  dependency-group: bundler
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-04 15:50:59 -07:00
.github Fix CodeQL security alerts: add CI permissions and document OAuth CSRF bypass 2026-03-29 16:29:27 -07:00
app Fix CodeQL security alerts: add CI permissions and document OAuth CSRF bypass 2026-03-29 16:29:27 -07:00
bin Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
config Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
db Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
lib/tasks Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
log Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
public Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
script Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
tmp Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
vendor Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
.dockerignore Add ex env to dockerignore 2026-03-19 22:54:51 -07:00
.env.example add env ex 2026-04-04 15:49:17 -07:00
.gitattributes Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
.gitignore add env ex 2026-04-04 15:49:17 -07:00
.rubocop.yml Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
.ruby-version Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
config.ru Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
docker-compose.coolify.yml coolify 2026-03-20 00:29:46 -07:00
Dockerfile Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
Gemfile Bump rails from 8.1.2 to 8.1.3 2026-03-29 14:19:46 -07:00
Gemfile.lock Bump rack from 3.2.5 to 3.2.6 in the bundler group across 1 directory 2026-04-04 15:50:59 -07:00
package-lock.json Bump picomatch from 4.0.3 to 4.0.4 2026-04-02 06:10:38 -07:00
package.json notes 2026-03-21 12:38:34 -07:00
Procfile.dev Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
Rakefile Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
README.md coolify 2026-03-20 00:29:46 -07:00
svelte.config.js Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00
vite.config.ts Rewrite from SvelteKit + Ruby/Grape to Rails 8 + Inertia.js + Svelte 5 2026-03-19 22:35:51 -07:00

Hack Club flag

stickers.hackclub.com

Hack Club logo

The Rails 8 + Inertia.js + Svelte 5 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

Development Setup

git clone https://github.com/hackclub/stickers
cd stickers

# Install dependencies
bundle install
pnpm install

# Set up environment
cp .env.example .env
# Edit .env with your credentials

# Set up database
bin/rails db:create db:migrate

# Start the server (runs on port 3100)
bin/dev

Environment Variables

Required environment variables in .env:

# Airtable
AIRTABLE_PAT=your_personal_access_token
AIRTABLE_BASE_ID=your_base_id
AIRTABLE_STICKER_DB_TABLE_ID=your_stickers_table_id
AIRTABLE_DESIGN_TABLE_ID=your_designs_table_id
AIRTABLE_SHOP_TABLE_ID=your_shop_table_id

# OAuth (auth.hackclub.com)
OIDC_CLIENT_ID=your_client_id
OIDC_CLIENT_SECRET=your_client_secret
OIDC_REDIRECT_URI=http://localhost:3100/auth/oidc/callback

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.

Stickers

  • GET /api/stickers - List all visible stickers
  • GET /api/stickers/:id - Get sticker details

Designs

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

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!

Deployment

Using Docker Compose (app + database):

  1. Create new resource → Docker Compose
  2. Point to your Git repo
  3. Set compose file to docker-compose.coolify.yml
  4. Set environment variables including POSTGRES_PASSWORD
  5. Set your domain for the stickers service
  6. Deploy

Using Dockerfile (app only):

  1. Create new resource → ApplicationDockerfile
  2. Point to your Git repo
  3. Set environment variables (see .env.example)
  4. Set DATABASE_URL to your PostgreSQL instance
  5. Set your domain
  6. Deploy

Option 2: Docker (Manual)

# Build and run
docker build -t stickers .
docker run -d -p 80:80 \
  -e SECRET_KEY_BASE="$(rails secret)" \
  -e DATABASE_URL="postgresql://user:pass@host/db" \
  -e AIRTABLE_PAT="..." \
  stickers

Production Environment Variables

Variable Description
SECRET_KEY_BASE Rails secret (generate with rails secret)
DATABASE_URL PostgreSQL connection string
AIRTABLE_PAT Airtable Personal Access Token
AIRTABLE_BASE_ID Airtable base ID
AIRTABLE_STICKER_DB_TABLE_ID Stickers table ID
AIRTABLE_SHOP_TABLE_ID Shop table ID
AIRTABLE_DESIGN_TABLE_ID Designs table ID
OIDC_ISSUER https://auth.hackclub.com
OIDC_CLIENT_ID OIDC client ID
OIDC_CLIENT_SECRET OIDC client secret
OIDC_REDIRECT_URI https://your-domain.com/auth/oidc/callback

See .env.example for a complete list.


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