54 lines
2.9 KiB
Plaintext
54 lines
2.9 KiB
Plaintext
# Cursor Rules
|
|
|
|
- When merging tailwind classes, use the `cn` function.
|
|
- When using Tailwind and you need to merge classes use the `cn` function if avilable.
|
|
- We use Tailwind 4 (the latest version), make sure to not use outdated classes.
|
|
- Instead of using the syntax`Array<T>`, use `T[]`.
|
|
- Use TypeScript `type` over `interface`.
|
|
- You are forbiddent o add comments unless explicitly stated by the user.
|
|
- Avoid sending JavaScript to the client. The JS send should be optional.
|
|
- In prisma preffer `select` over `include` when making queries.
|
|
- Import the types from prisma instead of hardcoding duplicates.
|
|
- Avoid duplicating similar html code, and parametrize it when possible or create separate components.
|
|
- Remember to check the prisma schema when doing things related to the database.
|
|
- Avoid hardcoding enums from the database, import them from prisma.
|
|
- Avoid using client-side JavaScript as much as possible. And if it has to be done, make it optional.
|
|
- The admin pages can use client-side JavaScript.
|
|
- Keep README.md in sync with new capabilities.
|
|
- The package manager is npm.
|
|
- For icons use the `Icon` component from `astro-icon/components`.
|
|
- For icons use the Remix Icon library preferably.
|
|
- Use the `Image` component from `astro:assets` for images.
|
|
- Use the `zod` library for schema validation.
|
|
- In the astro actions return, don't return success: true, or similar, just return an object with the newly created/edited objects or nothing.
|
|
- When adding actions, don't create and export a new variable called actions. Notice that Astro already provides that variable from `import { actions } from 'astro:actions'`. So just add the new actions to the `server` variable in `web/src/actions/index.ts` and that's it.
|
|
- Don't forget that the astro files have thre dashes (`---`) at the begining of the file and where the server js ends. I noticed that sometimes you forget them.
|
|
- The admin actions go into a separate folder.
|
|
- In Actro actions when throwing errors use ActionError.
|
|
- @deprecated Don't import this object, use {@link actions} instead, like: `import { actions } from 'astro:actions'`. Example:
|
|
|
|
```ts
|
|
import { actions } from "astro:actions"; /* CORRECT */
|
|
import { server } from "~/actions"; /* WRONG!!!! DON'T DO THIS */
|
|
import { adminAttributeActions } from "~/actions/admin/attribute.ts"; /* WRONG!!!! DON'T DO THIS */
|
|
|
|
const result = Astro.getActionResult(actions.admin.attribute.create);
|
|
```
|
|
|
|
- Always use Astro actions instead of with API routes or `if (Astro.request.method === "POST")`.
|
|
- When adding clientside js do it with HTMX.
|
|
- When adding HTMX, the layout component BaseLayout accepts a prop htmx to load it in that page. No need to use a cdn.
|
|
- When redirecting to login use the `makeLoginUrl` function from web/src/lib/redirectUrls.ts
|
|
|
|
```ts
|
|
function makeLoginUrl(
|
|
currentUrl: URL,
|
|
options: {
|
|
redirect?: URL | string | null;
|
|
error?: string | null;
|
|
logout?: boolean;
|
|
message?: string | null;
|
|
} = {}
|
|
);
|
|
```
|