Data Layer
Goal
This snapshot advances Meridian Notes by teaching you to model users and posts with Prisma and PostgreSQL.
Every numbered folder is a complete application. Run this stage on its own, then compare it with the previous snapshot to isolate the new responsibility.
Prerequisites
Use Node.js 20 or newer, npm, and a terminal. You should be comfortable with JavaScript functions, objects, modules, and basic HTML forms.
The development server uses port 3000. Data-backed snapshots use PostgreSQL on host port 5433 and keep their data in a database unique to that folder.
- Node.js and npm installed
- A code editor and terminal
- Docker from part 4 onward
Concepts
Prisma turns a schema into a typed client. Relations connect each post to an author, while indexes support the reads later feed and ownership features need.
Keep the server boundary visible: Server Components may read trusted data directly, while Server Actions and route handlers must validate all incoming values and re-check authorization.
Walkthrough
Start PostgreSQL, copy the environment file, migrate the snapshot-specific database, seed Ada and Grace, and query posts in a dynamic Server Component.
Trace the example from request to rendered result, then inspect the matching snapshot for its surrounding types, validation, error handling, and configuration.
const posts = await prisma.post.findMany({
include: { author: true },
orderBy: { createdAt: "desc" },
});
Run and verify
Enter 04-Data-Layer, install its dependencies, and copy .env.example when the snapshot includes one.
Open http://localhost:3000. Keep the terminal visible so framework, Prisma, and authentication errors can be matched to the browser action that caused them.
git clone https://github.com/michaeldunga1/fcc-nextjs-blog.git
cd fcc-nextjs-blog/04-Data-Layer
npm install
cp .env.example .env
docker compose -f ../docker-compose.yml up -d
npm run db:migrate
npm run db:seed
npm run dev
Troubleshooting
P1001 means Prisma cannot reach PostgreSQL. Confirm Docker health, port 5433, credentials, and the numbered database in DATABASE_URL.
A missing-module error usually means npm ran in another snapshot. Database errors often mean Docker is stopped, the environment file is missing, or this folder points at the wrong numbered database.
- Read the first error first
- Restart after environment changes
- Never commit .env or node_modules
Try this
Add a draft post in Prisma Studio and decide whether the feed should include it.
Test one expected path and one invalid or unauthorized path. A production-minded app gives useful feedback without exposing secrets or stack traces.
- Make one focused change
- Verify it in the browser
- Continue only after this snapshot works
Next: Feed and Detail
Comments
One comment per signed-in account. Comments are saved with this page’s URL.