Documentation
Complete guide to running events with Ribat — registration, teams, check-in, judging, and broadcasts.
Overview
Ribat is an end-to-end hackathon management platform. As an organizer you create events, build registration forms, manage participants, run check-in on the day, set up judging, and send broadcasts — all from one dashboard. Participants get their own portal to form teams, submit projects, and read announcements. Judges get a focused scoring interface.
What Ribat handles
- — Custom registration forms with waitlists
- — QR code check-in (email + live scanner)
- — Team formation with invite codes and skill matchmaking
- — Project submissions with media uploads
- — Conflict-free judge assignment and normalized leaderboard
- — Multi-channel broadcast: in-app, email, Discord, Telegram
Roles & access
A single Ribat account can hold different roles across different events. There is no need to create separate accounts.
| Role | URL | What they do |
|---|---|---|
| Organizer | /events | Full event management |
| Participant | /p/[eventId] | Team, submission, announcements |
| Judge | /j/[eventId] | Score assigned submissions |
| Public | /h/[slug] | View event page, register |
Sign in
Go to ribat.site/login and enter your email and password. After login, organizers land on /events. Participants and judges follow the direct event link shared by the organizer.
New accounts are created at ribat.site/signup. An email confirmation is required before first login.
Events dashboard
The home screen at /events lists all events you own.
Stats row
Once you have at least one event, four cards appear at the top: Total events, Registrations (summed across all events), Upcoming (future, non-archived), and Live now.
Events grid
Each event card shows the name, status badge, tagline, and start date. Click any card to go to that event's overview page.
Sidebar
The sidebar has two sections. Organizer contains Events and Settings links. Quick actions has a New event button and a link to this documentation. The bottom of the sidebar has your user menu — click it to access Profile, Settings, or Sign out.
Creating an event
Click + New event in the sidebar or on the events page. Enter the event name and click Create. The event is created in Draft status and you land on its settings page.
When your event is ready to accept registrations, toggle Public event page on and set Registration open to on in Settings. To go fully live (visible as "Live" in lists), publish the event from the Settings danger zone.
Event settings
Found at /e/[eventId]/settings.
Event details
Name (required), tagline, description, venue, timezone, and two toggles: Online event (hides venue, shows "Online" on the public page) and Public event page (controls visibility at /h/[slug]).
Tracks
Optional named categories (e.g. "AI", "Sustainability"). Participants can tag their team and submission with a track. Used for filtering in the leaderboard and analytics.
Team rules
Set minimum and maximum team size. Toggle Registration open to open or close the public registration form.
Registration form builder
Add custom fields that appear below the email field on the public registration form. Each field has a label, type, optional placeholder, required toggle, and — for dropdowns — a list of options (one per line).
| Type | Renders as |
|---|---|
| Short text | Single-line text input |
| Long text | Multi-line textarea |
| Dropdown | Select from your defined options |
| Checkbox | Boolean yes/no |
Drag the grip handle to reorder fields. Required fields show an asterisk on the public form. Answers are stored per registration and visible in the People table.
People
Found at /e/[eventId]/people. Every person registered for your event.
Table columns
Name/email, Team, Track, Check-in status, Role, Registration status, and Registration date. Use the search box to filter by name, email, or team. Use the status dropdown to filter by Pending / Confirmed / Waitlisted / Cancelled.
Bulk actions
Select rows with the checkboxes, then use the toolbar to Confirm, Send to waitlist, or Export CSV. The CSV includes: name, email, team, track, checked_in, role, status, registered_at.
Adding people directly
Click Add people to import registrants without the public form. Three modes:
- Single — type one email address.
- Bulk paste — paste multiple emails separated by newline, comma, or semicolon. A live counter shows how many valid emails were detected.
- CSV upload — upload a .csv file. The first column must be the email address; a header row is auto-detected and skipped.
Choose an initial status (Confirmed or Pending) before importing. Duplicate emails are skipped automatically.
Teams
Found at /e/[eventId]/teams.
Teams board
All teams shown as cards. Each card shows the team name, status badge (Forming → Building → Submitted), tagline, member count, invite code, and any skill needs. The lead member is tagged. Click the trash icon to delete a team (requires confirmation).
Creating a team as organizer
Click + Create team, enter a name, and optionally search and assign members from your registrant list. Only registrants with a Ribat account will be added at creation time.
Skill matchmaking
If there are solo participants (no team) and open teams with skill needs, a Match solo participants card appears. Each open team lists its best-matching solo participant by skill overlap. Click Match to open a ranked list and add someone to the team with one click.
Check-in
Found at /e/[eventId]/checkin. A live counter in the header shows checked-in vs total at all times.
QR scanner
Click Start scanner to activate the device camera. Attendees present the QR code from their registration confirmation email. A successful scan shows a "Checked in" toast; scanning the same code again shows "Already checked in".
Offline support: If the device loses connectivity, scans are queued locally and sync automatically when the connection is restored. The queue count is shown above the camera view.
Projection QR code
The large QR code on the left is a deep link for staff devices to jump straight into the scanner. It is not the same code attendees use — attendees scan their personal QR from their confirmation email.
Manual check-in
Search by name or email and check someone in without a QR code. Useful for participants who lost their confirmation email.
Judging
Found at /e/[eventId]/judging. Three parts: criteria, judge management, and leaderboard.
1. Define judging criteria
Add criteria with a name, description, weight, and max score. Judges see each criterion and its description while scoring. Weights determine how much each criterion contributes to the final score.
2. Invite judges
Enter a judge's email and click Invite. They must already have a Ribat account. An invitation email is sent with a link to their judging dashboard.
3. Auto-assign submissions
Enter a round number and how many submissions each judge should review. Click Auto-assign to distribute projects across judges with conflict-free, load-balanced allocation.
Leaderboard
Live results table ranked by normalized score. Normalization computes a z-score per judge before averaging, reducing the effect of harsh or lenient raters. Raw average is shown alongside for reference. Results are grouped by track if tracks are defined.
Broadcast
Found at /e/[eventId]/broadcast. Send announcements to participants across multiple channels at once.
Composing a message
Write your message in the textarea (up to 5,000 characters). A live counter shows how many characters remain. Select one or more channels, then click Send broadcast.
Channels
| Channel | What it does |
|---|---|
| In-app announcement | Real-time toast + appears in participants' Announcements feed instantly |
| Email (Resend) | Sent to all confirmed registrants via email |
| Discord webhook | Posted to the configured Discord channel |
| Telegram channel | Posted to the @RibatHQ Telegram channel |
Broadcast history
All previous broadcasts are listed below the composer with the message body, channel badges, time sent, and recipient count for email sends.
Schedule
Found at /e/[eventId]/schedule. Build the run-of-show for your event.
Each item has a title, start time, and kind (Talk, Workshop, Break, Meal, Ceremony, Hacking, Other). Items are sorted by start time. Participants see the next 5 upcoming items on their home dashboard.
Analytics
Found at /e/[eventId]/analytics.
Four summary cards: Registered, Checked in (count + percentage), Submitted, and Judging done (scored/total + percentage). Two charts: Registrations over time (line chart by day) and Submissions by track (bar chart).
Public event page
Located at ribat.site/h/[slug]. Visible when Public event page is toggled on in Settings.
What's shown
Event name, tagline, description, date/time, venue (or "Online"), track badges, and the upcoming schedule. A View submissions button links to the gallery once projects are submitted.
Registration form
Shown when Registration open is on. The email field is always present. Custom fields defined in the Form Builder appear below it. Required fields are marked with *. On success, the page shows: "You're in — check your email for confirmation and your check-in QR code."
Rate limit: 5 registrations per 60 seconds per IP address.
Gallery
At /h/[slug]/gallery. Public list of submitted projects showing title, summary, tech stack (up to 5 badges), and a demo link where provided.
Participant portal
At ribat.site/p/[eventId]. Four sections via top navigation.
Home
Dashboard with four cards: team status, submission status, announcements preview (3 most recent, unread highlighted), and schedule preview (next 5 items).
Team
If you're on a team, shows team name, status, invite code, member list, and a Looking for field (team lead only). Options if you have no team:
- Create a team — name (required, max 80 chars), tagline (optional, max 160 chars), optional track.
- Join via invite code — enter the 6-character code a teammate shares with you.
- Browse open teams — list of teams accepting new members, with skill needs shown. Join with one click.
Submit
You must be on a team to submit. Fields:
| Field | Limit | Required |
|---|---|---|
| Project title | 120 chars | Yes |
| One-line summary | 280 chars | No |
| Description (Markdown) | 20,000 chars | No |
| Track | — | No |
| Repository URL | — | No |
| Live demo URL | — | No |
| Video URL | — | No |
| Tech stack | Comma-separated | No |
| Media / screenshots | Images, MP4, WebM | No |
Use Save draft to save progress. Use Submit for judging to enter the judging queue. You can re-submit and edit until the organizer closes submissions.
Announcements
Full feed of organizer broadcasts, newest first (up to 50). New announcements appear instantly as a toast notification and in the feed without a page refresh. Unread items have a highlighted background.
Judge portal
At ribat.site/j/[eventId]. Only accessible to users invited as judges by the organizer.
The left sidebar lists your assigned submissions, each marked complete or in-progress. Select a submission to view the full project details — title, summary, description, links, and tech stack — then score each judging criterion with a slider (0 to max score). Add an optional comment per criterion (up to 1,000 characters). Scores autosave on every change. Progress is shown as X of N submissions scored.
If the organizer has not yet set up judging criteria or assigned submissions, a message prompts you to check back later.
Account settings
At ribat.site/settings. Access from the sidebar or user menu.
Profile card: your email (read-only), full name, and bio. Full name is displayed in the sidebar. Click Save to update.
Change password card: enter a new password (minimum 8 characters) and confirm it. Click Save to update.
Email notifications
All emails are sent from hello@ribat.site on behalf of your event.
Registration confirmation
Trigger: Automatic — sent when someone registers via the public form
Subject: You're registered for [Event Name]
Includes event date/time, venue, and the participant's personal QR code for check-in.
Event reminder
Trigger: Manual — organizer clicks Send 24h reminder or Send 1h reminder on the Overview page
Subject: [Event Name] starts tomorrow / in 1 hour
Same QR code and fallback check-in link. Sent to all confirmed registrants.
Judge invite
Trigger: Automatic — sent when organizer invites a judge from the Judging page
Subject: You're invited to judge [Event Name]
Includes event details and a direct link to the judging dashboard.
Results / thank you
Trigger: Manual — sent by the organizer after judging, with an optional custom message
Subject: Results from [Event Name]
Personalised with the participant's name and submission title.
Limits reference
| Item | Limit |
|---|---|
| Broadcast message | 5,000 characters |
| Project title | 120 characters |
| Project one-liner summary | 280 characters |
| Project description | 20,000 characters (Markdown supported) |
| Team name | 80 characters |
| Team tagline | 160 characters |
| Judge comment per criterion | 1,000 characters |
| Tech stack badges in gallery | 5 shown (more stored, not displayed) |
| Announcements preview on home | 3 most recent |
| Schedule preview on home | 5 next upcoming |
| Announcements feed | 50 most recent |
| Broadcast history shown | 50 most recent |
| Media upload types | Images (any format), MP4, WebM |
| Registration rate limit | 5 per 60 seconds per IP |
| Broadcast rate limit | 10 per 60 seconds per event |
| Email batch size | 100 per API call (auto-chunked) |
| Minimum password length | 8 characters |