Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 47 additions & 48 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,48 +1,47 @@
# dependencies
node_modules
.pnp
.pnp.js

# next.js
.next
out
build
dist

# env
.env
.env.local
.env.development.local
.env.test.local
.env.production.local

# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*

# testing
coverage

# misc
.DS_Store
*.pem
Thumbs.db
*.swp
*.swo

# IDE
.idea
.vscode/*
!.vscode/extensions.json
!.vscode/settings.json

# Vercel
.vercel

# TypeScript
*.tsbuildinfo

# Prisma generated client (regenerated via postinstall / pnpm db:generate)
lib/generated
# dependencies
node_modules
.pnp
.pnp.js

# next.js
.next
out
build
dist

# env
.env.development.local
.env.test.local
.env.production.local

# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*

# testing
coverage

# misc
.DS_Store
*.pem
Thumbs.db
*.swp
*.swo

# IDE
.idea
.vscode/*
!.vscode/extensions.json
!.vscode/settings.json

# Vercel
.vercel

# TypeScript
*.tsbuildinfo

# Prisma generated client (regenerated via postinstall / pnpm db:generate)
lib/generated
config.bat
2 changes: 1 addition & 1 deletion .husky/pre-push
Original file line number Diff line number Diff line change
@@ -1 +1 @@
node scripts/pre-push.js
node scripts/pre-push.js
66 changes: 33 additions & 33 deletions app/(public)/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
import Navbar from "@/components/layout/navbar";
import { getCurrentSession } from "@/lib/auth";
import type { UserMenuSession } from "@/components/layout/user-menu";

// Public route group: anything inside (public) gets the public navbar
// (and, in Phase 2 / ISSUE-011, the public footer). Dashboard and (auth)
// routes have their own layouts and do NOT inherit this chrome.

export default async function PublicLayout({ children }: { children: React.ReactNode }) {
const session = await getCurrentSession();
const navSession: UserMenuSession | null = session
? {
user: {
id: session.user.id,
name: session.user.name,
email: session.user.email,
image: session.user.image ?? null,
username: (session.user as { username?: string | null }).username ?? undefined,
role: ((session.user as { role?: string }).role ?? "MEMBER") as
| "GUEST"
| "MEMBER"
| "ADMIN",
},
}
: null;

return (
<>
<Navbar session={navSession} />
{children}
</>
);
}
import Navbar from "@/components/layout/navbar";
import { getCurrentSession } from "@/lib/auth";
import type { UserMenuSession } from "@/components/layout/user-menu";
// Public route group: anything inside (public) gets the public navbar
// (and, in Phase 2 / ISSUE-011, the public footer). Dashboard and (auth)
// routes have their own layouts and do NOT inherit this chrome.
export default async function PublicLayout({ children }: { children: React.ReactNode }) {
const session = await getCurrentSession();
const navSession: UserMenuSession | null = session
? {
user: {
id: session.user.id,
name: session.user.name,
email: session.user.email,
image: session.user.image ?? null,
username: (session.user as { username?: string | null }).username ?? undefined,
role: ((session.user as { role?: string }).role ?? "MEMBER") as
| "GUEST"
| "MEMBER"
| "ADMIN",
},
}
: null;
return (
<>
<Navbar session={navSession} />
{children}
</>
);
}
46 changes: 23 additions & 23 deletions app/(public)/page.tsx
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
// Placeholder landing page — the full landing is built in Phase 2 (ISSUE-022..026).
// This screen exists so the foundation scaffold compiles and is browseable.

export default function HomePage() {
return (
<main className="min-h-screen flex items-center justify-center px-6">
<div className="max-w-xl text-center">
<p className="text-[12px] font-semibold uppercase tracking-[0.08em] text-primary-500">
Foundation · v0.1
</p>
<h1 className="mt-4 text-4xl sm:text-5xl font-extrabold tracking-tight text-neutral-900">
REACT JS RWANDA
</h1>
<p className="mt-4 text-sm text-neutral-500 leading-relaxed">
The scaffold is up. Public pages, member directory, library, and forum land in Phase 2 —
see <code className="font-mono text-neutral-700">project-phases.md</code>. Pick an issue
from the backlog and start contributing — read{" "}
<code className="font-mono text-neutral-700">CONTRIBUTING.md</code> first.
</p>
</div>
</main>
);
}
// Placeholder landing page — the full landing is built in Phase 2 (ISSUE-022..026).
// This screen exists so the foundation scaffold compiles and is browseable.
export default function HomePage() {
return (
<main className="min-h-screen flex items-center justify-center px-6">
<div className="max-w-xl text-center">
<p className="text-[12px] font-semibold uppercase tracking-[0.08em] text-primary-500">
Foundation · v0.1
</p>
<h1 className="mt-4 text-4xl sm:text-5xl font-extrabold tracking-tight text-neutral-900">
REACT JS RWANDA
</h1>
<p className="mt-4 text-sm text-neutral-500 leading-relaxed">
The scaffold is up. Public pages, member directory, library, and forum land in Phase 2 —
see <code className="font-mono text-neutral-700">project-phases.md</code>. Pick an issue
from the backlog and start contributing — read{" "}
<code className="font-mono text-neutral-700">CONTRIBUTING.md</code> first.
</p>
</div>
</main>
);
}
Loading