Skip to content
Snippets Groups Projects
Select Git revision
  • renovate/ruby
  • renovate/bootsnap-1.x-lockfile
  • renovate/selenium-webdriver-4.x-lockfile
  • main default protected
  • eh22 protected
  • update-readme
  • update-rubocop
7 results

rescheduled

  • Clone with SSH
  • Clone with HTTPS
  • Teal's avatar
    Teal authored
    Dark Mode & UI Improvements
    
    See merge request !28
    218c8fcd
    History

    C3Lingo rescheduled

    Rapid assignment of shifts for chaos events

    Overview

    Features

    • Automatic schedule import for re:publica, Pretalx/Hub
    • Integrations with C3Lingo Filedrop, Engelsystem and more
    • Collaborate live on session changes using websockets
    • One-click assignment of angels
    • Express interest (with optional note) for sessions
    • Stay on top of assignments with My Assignments view and personalized calendar (.ics) feeds
    • Add globally visible notes to sessions
    • Multiple conferences supported
    • Conflict detection even across conferences
    • Self-service account creation with optional invite-token
    • Manage source and target languages per angel and per session
    • Dark mode and (mostly) responsive web app
    • Statistics and leaderboards
    • ... and more 🎁

    Technologies:

    Dev environment

    The project comes with a devcontainer for VSCode and compatible editors. Simply open the project folder in Code (or using devcontainer open <path>) and after a few seconds, a suitable container should be ready.

    Run bin/dev in the integrated terminal to start the dev webserver and the tailwind watch job (see Procfile.dev for details). Access your local rescheduled at http://127.0.0.1:3000.

    Secrets

    The application requires some secrets, as of writing these include:

    • filedrop_user
    • filedrop_password
    • heartbeat_deen
    • heartbeat_more
    • telegram_bot_token

    You can supply the secrets by running rails credentials:edit or pass them as environment variable in upper case (e.g. FILEDROP_USER).

    Preparation for an event

    tbd.

    • talks about seeds
    • set "relevant stages"
      relevant = ["Saal 1", "Saal ZIGZAG", "Saal GLITCH", "Stage HUFF", "Stage YELL", "Canceled talk"]
      conf=Conference.find_by(slug: "38c3")
      conf.relevant_stages=conf.stages.select { |val| relevant.include?(val[:name]) }
    • sort stages
      Stage.where(name: "Saal 1").update(weight: 10)
      Stage.where(name: "Saal GLITCH").update(weight: 20)
      Stage.where(name: "Saal ZIGZAG").update(weight: 30)
      Stage.where(name: "Stage HUFF").update(weight: 40)
      Stage.where(name: "Stage YELL").update(weight: 50)

    In production

    See rescheduled-deploy for a full docker-compose stack and more explanations.

    Colors (darkmode)

    • text: text-slate-300

    • text (overlay): text-slate-200

    • text light: text-slate-400

    • logo: text-white

    • highlight: text-red-500

    • dark background: bg-zinc-700

    • light background: bg-gray-900

    • overlay: bg-gray-600

    • input: bg-zinc-900

    • shadow: gray-400

    Tips and Tricks

    Helpful rails tasks

    By running bin/rails <command> you can trigger some helpful actions, such as

    • rails c[onsole]: Start interactive ruby shell
    • rails db: Start sqlite shell with the currently used DB
    • rails db:migrate: Run pending DB migrations, automatically done by docker image on start
    • rails db:seed (Re-)import DB seeds from db/seeds.rb
    • rails secret generate a random secret, e.g. for secret_key_base
    • rails generate Powerful tool to generate boilerplate, run it to see list of options

    In rails console

    • Manually trigger sync job

      FetchConferenceDataJob.perform_now("38c3")
    • Promote user to shiftcoordinator

      User.find_by(name:"username_here").update(shiftcoordinator: true)
    • Reset user password

      pw = SecureRandom.alphanumeric(12)
      User.find_by(name:"username_here").update(password: pw, password_confirmation: pw)
    • Print differences between local assignments and those in the engelsystem (taking into account assignments in the "variant conferences")

      Conference.find_by(slug:"38c3").compare_engelsystem_shifts([Conference.find_by(slug:"38c3-more"), Conference.find_by(slug: "38c3-orga")])
    • Send a test message to Telegram

      TelegramGroupChatNotificationJob.perform_now(text: "der habicht sieht die gegenwart")
    • List all notes angels put in their candidacies:

      Candidate.includes(:user, :session).where.not(note: [nil, ""]).pluck('sessions.title','users.name', :note)