NeighbourNetk is a neighbourhood help board where residents can post what they need and volunteers can respond — from errands and groceries to tech questions and study support.
It is built as a full-stack web app with:
- React (Create React App) for the frontend
- Node/Express for the legacy local API (optional)
- Supabase (Postgres + Auth + Row Level Security) for the production database and authentication
The project is designed to be:
- Human‑centred – focused on clear, low‑friction flows for neighbours and volunteers
- Production‑minded – real authentication, persistent storage, access control, and deployment‑ready
- Portfolio‑ready – clean structure and documentation suitable for graduate applications and hiring managers
-
Neighbour requests
- Create help requests with title, detailed description, category, and neighbourhood/area
- Status workflow: Open → In progress → Resolved
- Filters by status, category, and view (all requests / my requests / requests I’m helping with)
-
Volunteer responses
- Any authenticated user can respond to a request with a message and their name
- Responses are timestamped and shown in chronological order under each request
-
Two roles
- Neighbour – focuses on posting and tracking their own requests
- Volunteer – focuses on browsing open requests and responding where they can help
-
Authentication & accounts (Supabase Auth)
- Email + password signup with confirmation emails
- Sign in / sign out flows
- Requests and responses linked to
auth.usersviacreated_by_user_idandvolunteer_user_id
-
Security (Row Level Security)
- Public read access to help requests and responses
- Only authenticated users can create requests and responses
- Only the owner of a request (matching
created_by_user_id) can update its content and status
- React app in
frontend/ - Main screen (
App.js) provides:- “Display as” profile strip for name, email, and role
- Auth strip for email/password signup and sign in
- Request creation form
- Explainer sidebar (“How NeighbourNetk works”)
- Filterable list of help requests and responses
- Styling is done with plain CSS in
App.css, focusing on a calm, legible look rather than a heavy component library
-
Supabase Postgres
- Tables defined in
supabase/schema.sql:help_requestshelp_responses
- Indices on
created_at,status, andrequest_id - Row Level Security policies:
- Public read on both tables
- Authenticated inserts only, with user IDs constrained to
auth.uid() - Owners‑only updates on
help_requests
- Tables defined in
-
Supabase Auth
- Email/password auth with confirmation emails
- Application code uses
supabase.auth.getUser()to attach user IDs and emails to records
-
Legacy Node/Express API
- Simple in‑memory Express server in
backend/server.js - Kept for local/offline experimentation; the production path uses Supabase directly from the frontend
- Simple in‑memory Express server in
- Node.js (LTS)
- npm
- A Supabase project (free tier is fine)
git clone https://github.com/<your-username>/NeighbourNetk.git
cd NeighbourNetk-
Create a new Supabase project.
-
In the Supabase dashboard, open SQL Editor and run the contents of:
supabase/schema.sqlThis creates the
help_requestsandhelp_responsestables and all RLS policies. -
In Supabase Auth → Sign in / Providers, enable Email (email + password) signups.
-
Go to the
frontend/folder.cd frontend -
Copy the example environment file and fill it with your Supabase values:
cp .env.example .env
Then edit
.env:REACT_APP_SUPABASE_URL=YOUR_SUPABASE_PROJECT_URL REACT_APP_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY
-
Install dependencies and start the dev server:
npm install npm start
-
Open the app at
http://localhost:3000.
The frontend is designed to talk directly to Supabase when environment variables are present.
If you want to experiment with the older Node/Express API:
cd ..
npm install
node backend/server.jsThen adjust the fetch calls in App.js to use http://localhost:5000 instead of Supabase.
The recommended deployment is:
- Frontend on Vercel (or Netlify/Render)
- Supabase project hosted by Supabase
High‑level deployment steps:
-
Push the repo to GitHub.
-
Create a new Vercel project pointing at the
frontendfolder. -
Configure environment variables in Vercel:
REACT_APP_SUPABASE_URLREACT_APP_SUPABASE_ANON_KEY
-
Trigger a deploy and verify that:
- Signing up / signing in works.
- Creating requests and responses writes to the Supabase tables.
- Status updates succeed only for the owner of the request.
NeighbourNetk is intentionally aligned with community‑oriented initiatives:
- Encourages mutual aid within local communities.
- Lowers the barrier for asking for help by focusing on short, structured requests.
- Makes it easy for volunteers to discover where they can be most useful.
From a technical perspective, it demonstrates:
- Practical use of a managed Postgres (Supabase) with a carefully designed schema.
- Real authentication and authorisation with Row Level Security.
- A thoughtful UX for two user roles interacting around a shared resource.
This combination makes it a strong, honest portfolio piece for graduate applications and software engineering roles.