Skip to content

hackclub/hackathons-backend

Repository files navigation

Hackathons Backend

The thing that powers hackathons.hackclub.com!

  • 📎 Collecting and reviewing applications to list your hackathon
  • 📧 Notifying subscribers of hackathons in their area
  • 🌍 Geocoding hackathon and subscription locations into coordinates
  • 💾 Archiving hackathon websites for posterity
  • 🗓️ Provides a JSON API for the front-end
📝 Application Form 📬 Subscription Email
Screenshot of Hackathons application form Screenshot of Hackathons subscription email

Contributing

This app is built with 🛤️ Ruby on Rails (running on the edge). It uses 🐘 PostgreSQL for the database and 🥋 Sidekiq/Redis for background jobs.

Getting Started

  1. Make sure you have Docker and Ruby 3.3.0 installed.

  2. Clone the repo

    git clone https://github.com/hackclub/hackathons-backend.git
    cd hackathons-backend
  3. Setup credentials

    cp .env.example .env
  4. Install dependencies

    bundle install
  5. Boot required services (PostgreSQL, etc.)

    docker compose up
  6. Setup the database and run the server

    rails db:prepare
    rails server

The application will now be running at localhost:3000!

Additional Dependencies

Rails 7 (Active Storage) depends on vips to process images. You'll want this dependency installed on your machine. For macs, run:

brew install vips

Production Deployment

Vendors:

  • Heroku
    • Postgres (Heroku Postgres standard0)
    • Redis (Heroku Data for Redis premium0)
  • Hetzner
    • Runs the Rails app and Sidekiq (3 vCPU, 4 GB)
    • Deployed via Kamal

Kamal

All pushes to the main branch are automatically deployed by Kamal.

  • Environment variables are stored on GitHub and accessed by GitHub Actions when deploying.
  • Deployments take 2-5 minutes to complete.
  • After pushing to main, please monitor the CD / Deploy check for the status of the deployment.

Production Rails Console

We audit the use of the production console with console1984 and audits1984.

To use the production console, you must first have SSH access to the Hetzner server(s). Please ask @garyhtou for access.

Then, run the following locally on your computer:

bin/console prod

Sidekiq

Sidekiq is used to process background jobs in production. In development, we use the good old default Active Job Async queue adapter.

To check up on Sidekiq, visit /admin/sidekiq on the production site. You must be logged in as an admin to access this page.


Application performance monitoring sponsored by AppSignal .