Inspiration

Running a student club should be about bringing people together, but much of the work happens across disconnected platforms. At Stony Brook, club officers juggle group chats, task spreadsheets, 25Live for room reservations, SB Engaged for event approvals, NXT for funding, and email threads with vendors. With information scattered everywhere, even answering “Are we ready for our next event?” becomes difficult.

We built ClubOS to bring these responsibilities into one connected workspace, helping club officers spend less time chasing updates and more time building their communities.

What it does

ClubOS connects events, tasks, communication, approvals, finances, vendors, and email drafts in one platform. Members can switch between clubs, manage work on a drag-and-drop task board, turn chat messages into tasks, and view each member’s workload.

Each event has its own workspace and a readiness score based on its tasks and approval progress. Budget totals update when expenses are added, and only the President or Treasurer can make financial changes.

Our Gemini-powered AI assistant can suggest event tasks, distribute work based on members’ workloads, turn discussions into action items, and draft emails. Every proposed change requires human confirmation and follows the same permission checks as the rest of the application.

For this prototype, 25Live, SB Engaged, and NXT workflows are simulated and clearly labeled. Vendors are sample entries, and emails are prepared as drafts rather than sent automatically.

How we built it

We built the backend in Python with FastAPI, SQLModel, and SQLite, even though it was our first time developing a backend. We designed a database supporting multiple clubs, added password hashing and JWT-based authentication, and implemented role-based permissions. Around 50 API endpoints support the dashboard, events, tasks, ClubChat, budgets, vendors, email generation, simulated approval workflows, and event readiness calculations.

We connected the AI assistant through Google Gemini’s function calling, allowing it to check club information, existing tasks, and member workloads before suggesting changes. Those suggestions become proposals that users can confirm or reject.

Simultaneously, we built the frontend in React 19 with Vite and Tailwind CSS v4, turning our wireframes into working screens for the dashboard, event workspace, task board, ClubChat, approvals, finance, vendors, email generator, and members, along with a club switcher. We used TanStack Query for data fetching and caching, React Router for navigation, Radix UI for accessible interface components, Framer Motion for animations, Lucide for icons, and dnd-kit for drag-and-drop interactions on the task board.

Every frontend request goes through one shared API module that handles login tokens and errors, including returning users to the login page when their session expires. Each screen includes loading, empty, and error states. The interface also reflects the backend’s permissions and clearly labels simulated approvals and sample vendors.

For the Steel and Steam theme, we used a warm, paper-like palette, a campus-red accent, and a copper gear logo. Purposeful animations make changes visible: numbers roll up, readiness gauges fill, and chat messages move into the task panel when converted into tasks.

Alongside development, we worked on club research and data integration to support real SBU club information. SBCS became the main demo club, with some board positions still represented by placeholders. Importing the complete researched club dataset remains a next step.

We deployed the frontend and backend to Vercel, with automatic deployments from GitHub, and wrote backend end-to-end tests that replay the demo workflow.

Challenges we ran into

Some of our hardest backend problems came from external services and our development environment. Antivirus software blocked secure AI connections, our original AI model was retired, and AI calls initially took close to a minute. We addressed connection issues, added automatic retries and fallback models, and reduced latency by disabling the model’s built-in thinking budget. Testing the deployed application also revealed a bug that did not appear locally.

On the frontend, the Windows development server sometimes missed rapid file saves and displayed a blank page. We switched to polling and added separate error boundaries for screens to contain failures.

Building the frontend while the backend was changing also required coordination. Shared API documentation and a centralized request module helped us adapt, while recording the complete demo exposed issues that testing individual screens had missed.

Accomplishments that we're proud of

We are proud of building a connected application while learning unfamiliar technologies under hackathon time pressure. Our favorite moments are when features work together: a chat message becomes a task, approval progress changes an event’s readiness score, and a new expense updates the budget.

We are especially proud of making the AI assistant useful while keeping users in control through confirmation and role-based permissions. On the frontend, we enjoyed creating animations that help users understand what changed without distracting them from their work.

What we learned

We learned the importance of agreeing on the design and API structure before dividing implementation work, communicating changes clearly, and documenting interfaces so frontend and backend development can happen simultaneously.

We also learned to expect external services to fail, test on the actual deployment, and verify complete user journeys instead of isolated screens. On the design side, a few meaningful animations can communicate progress more effectively than many decorative effects.

What's next for ClubOS

Our next steps are to import the complete club dataset, confirm the full SBCS executive board, and move the deployed demo to a persistent hosted database so changes survive server restarts.

We also want to add deadline notifications and let members ask the assistant for help directly through @clubos mentions in ClubChat.

Built With

Share this project:

Updates

Submission history