# Project Stack - Framework: Next.js 14+ (App Router strictly) - Backend/Database: Convex - Styling: Tailwind CSS - Maps: React-Leaflet - Scraping: Cheerio (running in Convex Node.js Actions) # Next.js Rules - ALWAYS use the App Router (`app/` directory). Never use the `pages/` directory. - Use React Server Components by default. Only add `"use client"` when hooks (useState, useEffect), browser APIs (Geolocation), or interactive mapping components are strictly necessary. - For data fetching, prefer fetching directly in Server Components or using Convex hooks in Client Components. # Convex Rules - Keep database schema definitions in `convex/schema.ts` strictly typed. - Convex Queries (`query`) MUST be pure and deterministic. Never put side effects (like fetching external APIs or scraping) inside a query. - Use Convex Actions (`action`) with the `"node"` runtime for the Cheerio web scraper. - Use Convex Mutations (`mutation`) to write the scraped data into the database. Actions must call Mutations to modify data. - Manage geospatial data strictly through the `@convex-dev/geospatial` component patterns. # Coding Style - Write clean, modular, and heavily commented code. - Always handle errors gracefully, especially for the Geolocation API (user denying permission) and the web scraper (target website layout changes). - Use TypeScript interfaces and types for all database models and API responses.
Workflows from the Neura Market marketplace related to this Cursor resource