This is a full-stack real estate platform built with React (frontend) and .NET 8 Web API (backend).
The system supports:
- Property listings
- User roles (Buyer, Agent, Admin)
- Property search and filtering
- Saved listings and inquiries
Frontend:
- React + TypeScript
- TanStack Query
- Zustand
- Tailwind CSS
- React Hook Form
Backend:
- .NET 8 Web API
- Entity Framework Core
- PostgreSQL
- Follow clean architecture (Domain, Application, Infrastructure, API)
- Avoid tight coupling between layers
- Use DTOs for API communication
- Never expose EF entities directly
- No implicit
anyin TypeScript - Do not use React.FC
- Prefer hooks over class components
- Use async/await consistently
- Use dependency injection in backend
-
Backend: use xUnit
-
Frontend: use Vitest
-
Write tests for:
- API endpoints
- business logic
- critical UI components
Backend:
dotnet restoredotnet builddotnet run
Frontend:
pnpm installpnpm dev
-
Keep PRs under 300 lines if possible
-
Include description of:
- what changed
- why it changed
-
Ensure all tests pass
-
Run lint before submitting
- Define DTOs
- Add backend endpoint
- Add frontend API call
- Implement UI
- Add tests
- pnpm
- dotnet CLI
- docker
- gh (GitHub CLI)
- ESLint (frontend)
- Prettier
- dotnet format (backend)
- Do NOT introduce new libraries unless necessary
- Reuse existing patterns in the repo
- Keep components small and composable
- Prefer clarity over cleverness
-
Never modify existing connection strings in
appsettings.jsonorappsettings.Development.json -
Always preserve:
- Database name
- Username
- Password
- Host and port
- Extend existing settings instead of replacing them
- Only add new keys (e.g., Jwt settings), do not remove existing ones
- Do NOT drop or recreate the database unless explicitly instructed
- Do NOT reset migrations without confirmation
- Do NOT overwrite entire files unless necessary
- Prefer incremental updates
If a file already contains user-defined values: → Preserve them and build around them
Codex may overwrite tsconfig.json or tsconfig.app.json and remove custom compiler options.
-
Never overwrite existing tsconfig files
-
Always preserve:
- compilerOptions (including ignoreDeprecations, paths, baseUrl)
- strict settings
- module resolution settings
- Extend existing config instead of replacing it
- Only add new fields if missing
If "ignoreDeprecations": "6.0" exists → it must not be removed