Skip to content

Commit 841c401

Browse files
authored
Merge pull request #1 from Debugging-Disciples/copilot/add-product-overview-page
Add Debugging Disciples Community Hub web app
2 parents 4139f83 + 2f995bd commit 841c401

32 files changed

Lines changed: 7910 additions & 2 deletions

.gitignore

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
3+
# dependencies
4+
/node_modules
5+
/.pnp
6+
.pnp.*
7+
.yarn/*
8+
!.yarn/patches
9+
!.yarn/plugins
10+
!.yarn/releases
11+
!.yarn/versions
12+
13+
# testing
14+
/coverage
15+
16+
# next.js
17+
/.next/
18+
/out/
19+
20+
# production
21+
/build
22+
23+
# misc
24+
.DS_Store
25+
*.pem
26+
27+
# debug
28+
npm-debug.log*
29+
yarn-debug.log*
30+
yarn-error.log*
31+
.pnpm-debug.log*
32+
33+
# env files (can opt-in for committing if needed)
34+
.env*
35+
36+
# vercel
37+
.vercel
38+
39+
# typescript
40+
*.tsbuildinfo
41+
next-env.d.ts
42+
43+
.env.local
44+
.env*.local

AGENTS.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<!-- BEGIN:nextjs-agent-rules -->
2+
# This is NOT the Next.js you know
3+
4+
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices.
5+
<!-- END:nextjs-agent-rules -->

CLAUDE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@AGENTS.md

README.md

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,72 @@
1-
# community-software
2-
Our Community Hub
1+
# Debugging Disciples – Community Hub
2+
3+
A Next.js community engagement hub for the **Debugging Disciples** community.
4+
5+
## Tech Stack
6+
7+
- **Next.js 16** (App Router, TypeScript)
8+
- **Tailwind CSS v4** (CSS-based theme configuration)
9+
- **NextAuth.js** (Slack OAuth)
10+
- **ESLint**
11+
12+
## Getting Started
13+
14+
1. Copy `.env.local.example` to `.env.local` and fill in your credentials:
15+
16+
```bash
17+
cp .env.local.example .env.local
18+
```
19+
20+
2. Install dependencies:
21+
22+
```bash
23+
npm install
24+
```
25+
26+
3. Run the development server:
27+
28+
```bash
29+
npm run dev
30+
```
31+
32+
Open [http://localhost:3000](http://localhost:3000) in your browser.
33+
34+
## Environment Variables
35+
36+
| Variable | Description |
37+
|---|---|
38+
| `NEXTAUTH_URL` | Base URL (e.g. `http://localhost:3000`) |
39+
| `NEXTAUTH_SECRET` | Random secret for NextAuth session signing |
40+
| `SLACK_CLIENT_ID` | Slack OAuth app client ID |
41+
| `SLACK_CLIENT_SECRET` | Slack OAuth app client secret |
42+
43+
## Features
44+
45+
- 🔐 **Slack OAuth** sign-in
46+
- 📊 **Engagement stats** dashboard (messages, prayer requests, sessions, streaks)
47+
- 🏆 **Badges** with hover tooltips
48+
- 📋 **Activity feed** with categorized entries
49+
- 👤 **Member profile** pages with editable bio
50+
- 🎨 **Dark tech aesthetic** with cyan/purple gradient branding
51+
52+
## Project Structure
53+
54+
```
55+
app/
56+
page.tsx # Landing / sign-in page
57+
dashboard/page.tsx # Protected dashboard
58+
profile/[id]/page.tsx # Member profile pages
59+
api/auth/[...nextauth]/route.ts
60+
components/
61+
AuthProvider.tsx
62+
LandingHero.tsx
63+
Features.tsx
64+
Navbar.tsx
65+
DashboardClient.tsx
66+
StatsGrid.tsx
67+
BadgesSection.tsx
68+
ActivityFeed.tsx
69+
ProfileClient.tsx
70+
lib/
71+
auth.ts # NextAuth configuration
72+
```
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import NextAuth from "next-auth";
2+
import { authOptions } from "@/lib/auth";
3+
4+
const handler = NextAuth(authOptions);
5+
6+
export { handler as GET, handler as POST };

app/dashboard/page.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { redirect } from "next/navigation";
2+
import { getServerSession } from "next-auth";
3+
import { authOptions } from "@/lib/auth";
4+
import { DashboardClient } from "@/components/DashboardClient";
5+
6+
export default async function DashboardPage() {
7+
const session = await getServerSession(authOptions);
8+
9+
if (!session) {
10+
redirect("/");
11+
}
12+
13+
return <DashboardClient session={session} />;
14+
}

app/favicon.ico

25.3 KB
Binary file not shown.

app/globals.css

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
@import "tailwindcss";
2+
3+
@theme {
4+
--color-tech-dark: #000000;
5+
--color-tech-darker: #0a0a0a;
6+
--color-brand-cyan: #06b6d4;
7+
--color-brand-purple: #8b5cf6;
8+
--color-tech-blue: #3b82f6;
9+
--color-fafafa: #fafafa;
10+
}
11+
12+
:root {
13+
--foreground-rgb: 250, 250, 250;
14+
--background: #000000;
15+
}
16+
17+
body {
18+
color: rgb(var(--foreground-rgb));
19+
background: var(--background);
20+
}
21+
22+
@layer utilities {
23+
.text-balance {
24+
text-wrap: balance;
25+
}
26+
}

app/layout.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import type { Metadata } from "next";
2+
import "./globals.css";
3+
import { AuthProvider } from "@/components/AuthProvider";
4+
5+
export const metadata: Metadata = {
6+
title: "Debugging Disciples | Community Hub",
7+
description: "Your community engagement hub for Debugging Disciples",
8+
};
9+
10+
export default function RootLayout({
11+
children,
12+
}: {
13+
children: React.ReactNode;
14+
}) {
15+
return (
16+
<html lang="en">
17+
<body className="font-sans bg-tech-dark text-white min-h-screen">
18+
<AuthProvider>{children}</AuthProvider>
19+
</body>
20+
</html>
21+
);
22+
}

app/page.tsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { LandingHero } from "@/components/LandingHero";
2+
import { Features } from "@/components/Features";
3+
4+
export default function Home() {
5+
return (
6+
<main className="min-h-screen bg-tech-dark relative overflow-hidden">
7+
{/* Circuit pattern background */}
8+
<div
9+
className="absolute inset-0 opacity-40"
10+
style={{
11+
backgroundImage:
12+
"radial-gradient(circle at 25px 25px, rgba(59,130,246,0.15) 1px, transparent 0), radial-gradient(circle at 75px 75px, rgba(139,92,246,0.15) 1px, transparent 0)",
13+
backgroundSize: "100px 100px",
14+
}}
15+
/>
16+
{/* Gradient overlay */}
17+
<div className="absolute inset-0 bg-gradient-to-br from-tech-dark via-brand-cyan/10 to-brand-purple/10" />
18+
19+
<div className="relative z-10">
20+
<LandingHero />
21+
<Features />
22+
</div>
23+
</main>
24+
);
25+
}

0 commit comments

Comments
 (0)