Skip to content

Latest commit

 

History

History
116 lines (70 loc) · 3.87 KB

File metadata and controls

116 lines (70 loc) · 3.87 KB

youCode 2026: RootSAP

Authors: Saurav, Linda, Apoorva, Bart

RootSAP Website

Inspiration

BC’s nonprofit sector is running on heart but short on hands. Thousands of organizations need skilled volunteers, yet the systems connecting willing people to the right opportunities are fragmented and underpowered. Our solution, RootSAP, bridges that gap by enabling nonprofits to co-create and co-host volunteer training workshops. Through a shared platform that matches organizations by location, cause, and skill needs, nonprofits can design collaborative learning experiences that train volunteers once and benefit many. Volunteers get exposure to multiple causes, a richer sense of community, and credentials that support long-term engagement. Instead of competing for capacity, nonprofits build it together; creating sustainable, cross-sector human infrastructure for BC’s social good network.

What it does

RootSAP is a platform where non-profit organizations can simply enter their information, choose their availability, and then get matched with a similar non-profit organization and have a custom-made event itinerary created for them to co-host training sessions for volunteers. Volunteers will be able to attend and gain real-life skillsets for future opportunities, and a chance to meet up and connect with organizers.

How we built it

Frontend: React, Vite, Tailwind CSS, Framer Motion, JavaScript

Backend: Python, Node.js, Express, SQLite, OpenAI API, TypeScript

Challenges we ran into

We initially had some issues deciding on the form of the data being stored, as well as integrating frontend with the backend in order to process and display data. But we were able to successfully ping the appropriate endpoints to make this work.

Accomplishments that we're proud of

We are proud of building a working backend script that correctly handles data as intended as well as designing the UI and fixing bugs during the process.

What we learned

We learned out to use Framer Motion for UI design, how to use Python with Node.js as a backend setup, as well as how to integrate frontend with backend code.

What's next for RootSAP

In the future, we look forward to expanding our app to include multi-language support as well as voice-over support in order to increase accessibility.

How To Run

Prerequisites

  • Node.js and npm
  • Python 3
  • An OPENAI_API_KEY for AI-generated workshop content

Install dependencies

Frontend:

cd frontend
npm install

Backend:

cd backend
npm install
python3 -m pip install openai python-dotenv

Configure the backend

Create a backend/.env file with:

OPENAI_API_KEY=your_openai_api_key
PORT=4000

Start the backend

cd backend
npm run dev

The backend runs on http://localhost:4000.

Start the frontend

cd frontend
npm run dev

The frontend runs on http://localhost:8080 and proxies API requests to the backend.

Open the app

Visit http://localhost:8080 in your browser.

Optional SQLite Addon (Backend)

The backend still uses the existing JSON files as the primary store.

An optional SQLite addon can mirror workshop registrations and RSVPs in parallel, so it does not change the current API behavior.

Enable it

Set these environment variables for the backend process:

  • SQLITE_ENABLED=true
  • SQLITE_DB_PATH=../db/workshops-addon.sqlite (optional override)

If SQLITE_ENABLED is not set, the addon is disabled by default.

What it stores

  • workshop_prompt_runs: canonical input_json and output_json matching Python input.json and output.json
  • rsvps: mirrored from /api/workshops/:id/rsvp

workshop_prompt_runs also keeps helper columns (organization/contact/topic/title) for easier filtering, but the JSON documents remain the source of truth.

If SQLite write/mirror fails, requests still succeed using the JSON flow.