feat: redesign landing page with brand system and section blocks
Build & Push Docker Image / build (push) Has been cancelled
Build & Push Docker Image / build (push) Has been cancelled
Refresh the homepage around new hero/services/roadmap sections, shared design tokens, and updated brand assets. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
# Coding Rules
|
||||
|
||||
Conventions for UI code in this Next.js (App Router) + Tailwind v4 + Shadcn codebase.
|
||||
|
||||
## Stack assumptions
|
||||
|
||||
- React 19 + Next.js 16 App Router
|
||||
- Tailwind CSS v4 (`@import "tailwindcss"` in `globals.css`)
|
||||
- CVA + `cn()` (`clsx` + `tailwind-merge`)
|
||||
- Radix-based Shadcn primitives in `components/ui/`
|
||||
- Motion library: `motion/react`
|
||||
- Themes: `next-themes` class strategy
|
||||
- Locale: Persian RTL by default
|
||||
|
||||
## Always
|
||||
|
||||
1. Follow `docs/design-system/*` and `.cursor/rules/*`.
|
||||
2. Reuse design tokens (CSS variables + Tailwind semantic colors).
|
||||
3. Use `<Container>` / `layout.*` for page sections.
|
||||
4. Use `type.*` or `<Typography>` for text styles.
|
||||
5. Use shared `Button` and `Card` components.
|
||||
6. Support light and dark themes without hardcoding surfaces.
|
||||
7. Preserve responsive behavior (mobile first).
|
||||
8. Preserve accessibility (focus, labels, reduced motion).
|
||||
9. Prefer semantic HTML and Radix patterns already in the repo.
|
||||
10. Keep components focused; extract when a pattern repeats twice+.
|
||||
|
||||
## Never
|
||||
|
||||
1. Create another content container / max-width system.
|
||||
2. Hardcode colors (`#29a19c`, `rgb(…)`, `text-gray-700`) in UI.
|
||||
3. Invent spacing outside the scale.
|
||||
4. Duplicate Button/Card/Input styles.
|
||||
5. Ship unadapted Shadcn/Tailark blocks.
|
||||
6. Introduce inconsistent radii/shadows/hover timings.
|
||||
7. Animate layout properties when transform suffices.
|
||||
8. Commit secrets or environment files.
|
||||
9. Add heavy dependencies for trivial UI.
|
||||
10. Bypass ESLint without cause.
|
||||
|
||||
## File organization
|
||||
|
||||
| Kind | Location |
|
||||
| --- | --- |
|
||||
| Page routes | `app/**` |
|
||||
| Marketing sections | `components/*.tsx` |
|
||||
| Primitives | `components/ui/*` |
|
||||
| Layout tokens | `lib/layout.ts` |
|
||||
| Typography tokens | `lib/typography.ts` |
|
||||
| Global CSS / theme | `app/globals.css` |
|
||||
|
||||
Name section files descriptively (`services-14.tsx`) or by domain (`footer.tsx`). Avoid `NewSection2.tsx`.
|
||||
|
||||
## Class composition
|
||||
|
||||
```tsx
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
className={cn(
|
||||
"section-shell bg-section-canvas",
|
||||
layout.sectionY,
|
||||
className
|
||||
)}
|
||||
```
|
||||
|
||||
- Put conditional classes in `cn`.
|
||||
- Do not string-concatenate Tailwind classes manually.
|
||||
- Prefer extending variants via CVA for reusable primitives.
|
||||
|
||||
## Imports
|
||||
|
||||
Use `@/` alias. Keep import groups tidy: external → `@/components` → `@/lib` → local.
|
||||
|
||||
## Client vs server
|
||||
|
||||
- Default Server Components.
|
||||
- Add `"use client"` only for hooks, browser APIs, or motion/theme interactivity.
|
||||
- Keep presentational children server-friendly when possible.
|
||||
|
||||
## State & data
|
||||
|
||||
- Follow existing form patterns (`react-hook-form` + zod).
|
||||
- Do not fetch in deeply nested presentational components if a parent already owns data.
|
||||
|
||||
## Comments
|
||||
|
||||
- Comment only non-obvious intent (animation thresholds, RTL quirks, token constraints).
|
||||
- Do not narrate obvious JSX.
|
||||
|
||||
## Related
|
||||
|
||||
- [shadcn.md](./shadcn.md)
|
||||
- [quality-checklist.md](./quality-checklist.md)
|
||||
Reference in New Issue
Block a user