Code Beyond Limits, Build Beyond Boundaries.
Welcome to the repository for the Ground Zero Community official website. This project is built using Next.js (App Router), Tailwind CSS v4, Framer Motion, and Lucide React, styled with a premium developer dark-mode aesthetic.
Ensure you have Node.js (v18.x or higher) installed.
npm installCreate a local .env (or .env.local) file in the root directory and define the required parameters. You can copy the contents of .env.sample as a starting point:
cp .env.sample .env| Variable | Description |
|---|---|
NEXT_PUBLIC_SUPABASE_URL |
The API URL of your Supabase project (found in Settings > API). |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY |
The anon (public) API key of your Supabase project (found in Settings > API). |
NEXT_PUBLIC_SUPABASE_PASSWORD |
The database password for your Supabase project. |
NEXT_PUBLIC_SUPABASE_SERVICE_ROLE_KEY |
The secret service_role API key of your Supabase project (found in Settings > API). Used in server-side routes to bypass Row Level Security. Do not expose this key on the client side. |
| Variable | Description |
|---|---|
NEXT_PUBLIC_GITHUB_ID |
Optional/reference GitHub OAuth Application Client ID. |
NEXT_PUBLIC_GITHUB_SECRET |
Optional/reference GitHub OAuth Application Client Secret. |
This project uses Supabase Authentication paired with a GitHub OAuth Provider for administrator login flow (/admin). Follow these steps to configure the integration:
- Go to your GitHub profile -> Settings -> Developer Settings -> OAuth Apps.
- Click New OAuth App.
- Set the following parameters:
- Application Name:
Ground Zero Community (Dev)or similar. - Homepage URL:
http://localhost:3000(or your active hosting URL). - Authorization callback URL:
https://<your-supabase-project-ref>.supabase.co/auth/v1/callback
(Replace<your-supabase-project-ref>with the unique reference ID of your Supabase project.)
- Application Name:
- Click Register Application.
- Copy the generated Client ID and click Generate a new client secret to obtain your Client Secret.
- Open your Supabase Dashboard and navigate to your project.
- Go to Authentication (sidebar) -> Providers -> GitHub.
- Toggle the switch to Enable GitHub.
- Paste the Client ID and Client Secret copied from GitHub.
- Save your changes.
The application interacts with and joins a set of tables in Supabase. Run the following queries in the Supabase SQL Editor to initialize the required tables:
NOTE: Please read the comments first, before you create the tables. And please look for the diagram for references.
create table public.roles (
id uuid not null default gen_random_uuid(),
role character varying not null,
permission text[] null,
constraint roles_pkey primary key (id)
) TABLESPACE pg_default;create table public.users (
id uuid not null default auth.uid (),
username character varying not null,
first_name character varying null,
last_name character varying null,
bio text null,
created_at timestamp without time zone not null default now(),
role uuid null default 'default_outsider_role_id'::uuid, -- You must have the Roles Table and set the default value of this for outsider role
constraint users_pkey primary key (id),i
constraint users_username_key unique (username),
constraint users_role_fkey foreign KEY (role) references roles (id)
) TABLESPACE pg_default;Where the default value of role was the outsider role or lowest role
create table public.testimonials (
id bigint generated by default as identity not null,
name character varying not null,
role uuid null default 'default_outsider_role_id'::uuid, -- You must have the Roles Table and set the default value of this for outsider role
quote character varying not null,
created_at timestamp without time zone not null default now(),
constraint testimonials_pkey primary key (id),
constraint testimonials_role_fkey foreign KEY (role) references roles (id) on update CASCADE on delete set null
) TABLESPACE pg_default;create table public.events (
id bigint generated by default as identity not null,
title character varying not null,
description text null,
categories json[] null,
created_at timestamp without time zone not null default now(),
started timestamp without time zone not null default now(),
"end" timestamp without time zone not null default now(),
location text null,
action character varying not null default 'Register Now'::character varying,
type character varying not null default 'Virtual'::character varying,
constraint events_pkey primary key (id)
) TABLESPACE pg_default;create table public.categories (
id bigint generated by default as identity not null,
title text not null,
"shortLabel" text not null,
description text null,
icon text null,
tools text[] null,
activities text[] null,
constraint categories_pkey primary key (id)
) TABLESPACE pg_default;create table public.discussions (
id bigint generated by default as identity not null,
event_id bigint null,
username character varying not null,
created_at timestamp with time zone not null default now(),
message character varying not null,
constraint discussions_pkey primary key (id),
constraint discussions_event_id_fkey foreign KEY (event_id) references events (id) on update CASCADE on delete set null
) TABLESPACE pg_default;erDiagram
ROLES {
UUID id PK
VARCHAR role
TEXT[] permission
}
USERS {
UUID id PK
VARCHAR username UK
UUID role FK
VARCHAR first_name
VARCHAR last_name
TEXT bio
TIMESTAMP created_at
}
TESTIMONIALS {
BIGINT id PK
UUID role FK
VARCHAR name
VARCHAR quote
TIMESTAMP created_at
}
EVENTS {
BIGINT id PK
VARCHAR title
TEXT description
JSON[] categories
TIMESTAMP created_at
TIMESTAMP started
TIMESTAMP end
TEXT location
VARCHAR action
VARCHAR type
}
CATEGORIES {
BIGINT id PK
TEXT title
TEXT shortLabel
TEXT description
TEXT icon
TEXT[] tools
TEXT[] activities
}
DISCUSSIONS {
BIGINT id PK
BIGINT event_id FK
VARCHAR username
VARCHAR message
TIMESTAMPTZ created_at
}
ROLES ||--o{ USERS : "assigned"
ROLES ||--o{ TESTIMONIALS : "represents"
EVENTS ||--o{ DISCUSSIONS : "has"
npm run devOpen http://localhost:3000 in your browser to view the active dev server.
Before submitting code, check for linter violations and build compiling status:
npm run lint
npm run build- Core Framework: Next.js 16 (App Router)
- Logic & UI Libraries: React 19, Framer Motion 12
- Style Compilation: Tailwind CSS v4
- Icons: Lucide React
- Typography Stack:
- Space Grotesk (Base body and headers)
- Space Mono (Technical, monospaced prompts, code variables, stats counters)
βββ public/ # Static assets (favicons, official logos)
β βββ images/
β β βββ logo.png # Official GZ emblem
βββ src/
β βββ app/ # Next.js App Router (pages & global layouts)
β β βββ admin/ # Admin endpoint for admin controls
β β βββ api/ # API Endpoints for asyncronous access
β β βββ globals.css # Core styles & Tailwind v4 theme configurations
β β βββ layout.tsx # Root layout containing font load variables
β β βββ page.tsx # Root landing page assembly
β βββ components/
β β βββ sections/ # Section-specific components (Hero, FAQ, etc.)
β β βββ shared/ # Persistent components (Navbar, Footer)
β β βββ ui/ # Reusable UI primitives (Button, Card, Badge)
β βββ hooks/ # Custom React hooks (useScroll)
β βββ lib/ # Shared utilities (cn helper)
We welcome contributions from developers, UI/UX designers, creators, and students of all experience levels!
Please read our CONTRIBUTING.md developer handbook for details on coding standards, branching structures, design system tokens, and pull request procedures.
- Discord Server: Join Discord
- Facebook Page: Follow Page
- Facebook Group: Join Group
- GitHub Organization: View Codebases