Project · 2026Live · not finished

Multi-gym management appMember app + owner console

A gym in your pocket, and the whole gym on the owner's desk.

Role
Design + build
Context
Technion final project
Dashboard
Home

The workThe design, the look, the app.

02The build ↓

A black with red in it.

The palette came from the photography: a loaded barbell, chalk dust, one hard red key light. The corners stay sharp, 4 px at most, because this is a fight card.

  • Ground#0B0908A black with red in it. Never blue-grey.
  • Red#FF3A1FThe thing that just happened.
  • Brass#C9982FEarned: streaks, belts, records.
  • Paper#E7E2D6Breaks the dark.
  • Steel#75828CNeutral data.

התעוררתי.תתחיל.

KarantinaThe shout: names, big numbers, buttonsI'm up. Start.

על הרצפה עכשיו

HeeboEverything else, in nine weightsOn the floor now.

Dress JABBO.

Every member dresses their own. Four colours, four outfits, nine faces: 144 characters from 13 drawings.

Colour House
Outfit
Face
Deadpan1 / 9

Two apps. One system.

Members use the app on their phone. Owners run the gym from the console. Both sit on one database, and every gym on it is walled off from the others.

JABBO member app home: today's workout on top, JABBO's line, the week's score
Member app · phone
JABBO owner console, today's board: live occupancy, revenue, members at risk of leaving
Owner console · desktopTap to see it big
One databaseEvery gym walled off from the others

A member's day

A day at the gym on the phone, screen by screen. Press Next, swipe the phone, or pick a step.

JABBO member app: the door screen, with the gym's code typed under the camera frame
Step 01 of 07

The door

Scan the QR at the door, or type the code under it. A workout only starts once you're in.

An owner's day

The same gym from the desk: the console the owner runs it from. Tap the screen to see it big.

JABBO owner console, today's board: live occupancy, revenue, members at risk of leaving
Step 01 of 08

Today's board

Who's in right now, who's about to leave, and a WhatsApp message ready for each of them.

One check-in, two screens

A member scans in on the phone. The same second, the owner's board counts one more person in the gym, and the check-in tops its live feed.

JABBO member app: the door screen, with the gym's code typed under the camera frame
Member · phoneTypes the door's codeIn
JABBO owner console before the check-in: 0 in the gym, the live feed's last entry at 17:57
Owner · console0 in the gym1 in the gym · 18:32

Every screen

The phone app and the owner's console, all in one place. Open the gallery, then tap any screen to see it big.

The buildThe code, the stack, the commits.

01The work ↑

How it's made.

What it runs on, what it's written in, the month it was built, and the rules the code keeps.

Shipped
JABBO
  • TypeScript75.2%
  • CSS19.2%
  • SQL5.6%
package.json
  • React18.3.1
  • TypeScript5.9.3
  • Node.js20+
  • Express4.22.2
  • PostgreSQL16
  • Vite6.4.3
CommitsAug 2026

165commits in 15 days, directed by Shadi.

Tap a lit day for its count.

Migrations

25steps that built the database, one on top of the other. Every gym in it is walled off from the others.

Screens
18
7 on the phone
11 on the desk
README.md

He set the rules the AI had to follow.

The code enforces every one of them now.

  • Won't start unsafe The server refuses to start if its database login could see past a gym's walls.
  • Nothing by default A question that forgets to name its gym gets nothing back, never everyone's data.
  • Keys work once A copied login key is caught, and every key from that sign-in is cancelled.
  • No hints A wrong email and a wrong password get the same answer, so guessing teaches nothing.
  • Roles are given Only the owner makes someone staff. Nobody can make themselves one.
  • Demo stays home The demo password can only be set up on this machine, never on the live server.
gymos
        • auth
        • db
        • middleware
        • routes
        • lib
      • drizzle25 .sql
        • screens35 files
        • console33 files
        • components
        • lib
        • styles
    • roles.ts
    • plans.ts
    • muscles.ts
    • methods.ts
    • character.ts

Under the hood

One database holds every gym, and the walls between them live inside the database itself. Two real tests on JABBO's own server.

A stranger's member

Every gym lives in one database, behind its own walls.

Gym AOwnermember id …9b6eNo such member
Gym BOwnerFound

A stolen login

Signing in gives a phone a key that works once.

Member's phonekeyfresh key
ThiefcopyCaught
JABBO
Designed and built by
Shadi Daoud
Made for
Technion · Full stack · Final project · 2026
Starring
JABBO, as himself