Checked AGENTS.md
This commit is contained in:
@@ -0,0 +1,204 @@
|
||||
# AGENTS.md — NGO Landing Page
|
||||
|
||||
Read this file fully before taking any action.
|
||||
|
||||
---
|
||||
|
||||
## Project Context
|
||||
|
||||
Single-page static landing page for an NGO ERP product.
|
||||
|
||||
| Item | Detail |
|
||||
|---|---|
|
||||
| Pages | `index.html` — the only HTML file |
|
||||
| Styling | Tailwind CSS v3 · source `src/input.css` → compiled `assets/site.css` |
|
||||
| Data | `blog.json` — flat array of blog posts, loaded at runtime by inline JS |
|
||||
| i18n | Inline `translations` object inside `index.html` (EN / ES / DE) |
|
||||
| Blog renderer | Inline `<script>` in `index.html` — no external JS files |
|
||||
| Dev server | `./start` (runs `live-server`) |
|
||||
| Git remote | `git@git.odoo4projects.com:Oliver/NGO.git` |
|
||||
|
||||
### File map
|
||||
|
||||
```
|
||||
index.html ← only HTML file — layout + all inline JS + i18n
|
||||
src/input.css ← Tailwind source (edit here, then rebuild)
|
||||
assets/site.css ← compiled output — DO NOT edit by hand
|
||||
blog.json ← blog post data array
|
||||
tailwind.config.js ← design tokens (colors, fonts, shadows)
|
||||
```
|
||||
|
||||
### Design tokens (from `tailwind.config.js`)
|
||||
|
||||
| Token | Hex | Usage |
|
||||
|---|---|---|
|
||||
| `brand-ink` | `#201824` | default text / dark backgrounds |
|
||||
| `brand-primary` | `#603F57` | section labels, bullet accents |
|
||||
| `brand-accent` | `#F762B4` | CTA buttons, links |
|
||||
| `brand-sunrise` | `#F8B84A` | hero highlights, hover states |
|
||||
| `brand-emerald` | `#39B982` | positive indicators |
|
||||
| `brand-snow` | `#F5F2F7` | page background |
|
||||
| `brand-smoke` | `#E5DCE8` | borders, subtle dividers |
|
||||
|
||||
NEVER use raw hex values in HTML — always use the token class names above.
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Goal
|
||||
|
||||
- Deliver an **SEO-optimised, fast-loading, responsive** single-page site.
|
||||
- Keep all edits **minimal and targeted** — preserve design, structure, and functionality.
|
||||
- NEVER introduce new frameworks, libraries, or external dependencies.
|
||||
|
||||
### Quality bar for every change
|
||||
|
||||
| Concern | Rule |
|
||||
|---|---|
|
||||
| SEO | Keep all existing meta tags, `ld+json`, `alt` attributes, and heading hierarchy |
|
||||
| Performance | No comments in production HTML, no unused CSS classes, no render-blocking additions |
|
||||
| Responsive | Every element must work on mobile (375 px), tablet (768 px), and desktop (1280 px+) |
|
||||
| Consistency | Use only brand token classes; match existing spacing and rounding patterns |
|
||||
|
||||
---
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
# Build CSS after editing src/input.css or tailwind.config.js
|
||||
npx tailwindcss -i src/input.css -o assets/site.css --minify
|
||||
|
||||
# Validate blog.json
|
||||
jq empty blog.json && echo "JSON valid"
|
||||
|
||||
# Start dev server
|
||||
./start
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Git Rules
|
||||
|
||||
- ALWAYS work on **`main`** branch.
|
||||
- Pull before every session:
|
||||
```bash
|
||||
git pull origin main
|
||||
```
|
||||
- Commit messages must follow the pattern:
|
||||
- `blog: add post – <title>`
|
||||
- `fix: <short description>`
|
||||
- `content: <short description>`
|
||||
- Push immediately after committing — never leave unpushed commits.
|
||||
- Branch creation is permitted ONLY under the **Branch Handling Exception** (see bottom).
|
||||
|
||||
---
|
||||
|
||||
## File Safety Rules
|
||||
|
||||
- ONLY modify files required for the task.
|
||||
- NEVER delete or restructure content unrelated to the task.
|
||||
- NEVER remove existing blog posts from `blog.json`.
|
||||
- NEVER edit `assets/site.css` directly — always rebuild from `src/input.css`.
|
||||
|
||||
---
|
||||
|
||||
## Blog Post Schema
|
||||
|
||||
`blog.json` is a root-level JSON array. Every post object contains **exactly these five fields**:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"area": "Automation",
|
||||
"date": "2026-03-25",
|
||||
"title": "Article title as plain text",
|
||||
"teaser": "<p>One or two sentences visible before 'Read more'.</p>",
|
||||
"content": "<h3>Section</h3><p>Full article as HTML.</p>"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
| Field | Type | Constraint |
|
||||
|---|---|---|
|
||||
| `area` | plain string | Category label rendered above the title |
|
||||
| `date` | ISO 8601 (`YYYY-MM-DD`) | Used by `Intl.DateTimeFormat` |
|
||||
| `title` | plain string | Rendered as `<h3>` — no HTML |
|
||||
| `teaser` | HTML string | Always visible — wrap in `<p>` tags |
|
||||
| `content` | HTML string | Revealed by "Read more" toggle — use `<h3>`, `<p>`, `<ul>`, `<li>` |
|
||||
|
||||
NEVER add extra fields (`slug`, `author`, `tags`, `excerpt`, `hero_image`, etc.) — they are ignored by the renderer and pollute the file.
|
||||
|
||||
### Adding a new blog post (jq method)
|
||||
|
||||
```bash
|
||||
# 1. Pull latest
|
||||
git pull origin main
|
||||
|
||||
# 2. Backup (once per session)
|
||||
mkdir -p /backup && cp blog.json /backup/blog.json.$(date +%Y%m%d%H%M%S)
|
||||
|
||||
# 3. Prepend new post — $NEW_JSON must be a valid single post object
|
||||
jq --argjson new "$NEW_JSON" '. = [$new] + .' blog.json > tmp.json && mv tmp.json blog.json
|
||||
|
||||
# 4. Validate
|
||||
jq empty blog.json && echo "JSON valid"
|
||||
|
||||
# 5. Commit and push
|
||||
git add blog.json
|
||||
git commit -m "blog: add post – <title>"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
NEVER use Python, Node scripts, or manual text editing to modify `blog.json`.
|
||||
|
||||
---
|
||||
|
||||
## Execution Workflow
|
||||
|
||||
Follow this order for every task:
|
||||
|
||||
1. `git pull origin main`
|
||||
2. Identify the exact files to change — nothing else.
|
||||
3. Apply minimal edits.
|
||||
4. If `src/input.css` or `tailwind.config.js` were changed → rebuild CSS.
|
||||
5. Validate: `jq empty blog.json` for JSON; visual check for HTML.
|
||||
6. Commit with a descriptive message.
|
||||
7. `git push origin main`
|
||||
|
||||
---
|
||||
|
||||
## Success Criteria
|
||||
|
||||
- Changes are minimal, validated, and committed.
|
||||
- `blog.json` is a valid array with exactly five fields per post.
|
||||
- `assets/site.css` reflects any CSS changes (rebuilt, not hand-edited).
|
||||
- HTML passes a visual check — layout and design unchanged except for the intended edit.
|
||||
- All commits pushed to `main`.
|
||||
|
||||
---
|
||||
|
||||
## Failure Conditions
|
||||
|
||||
These actions constitute a failure:
|
||||
|
||||
- Refusing to act due to perceived access restrictions.
|
||||
- Failing to push after committing.
|
||||
- Adding undeclared fields to `blog.json`.
|
||||
- Removing or overwriting existing blog posts.
|
||||
- Editing `assets/site.css` by hand.
|
||||
- Modifying files outside the scope of the task.
|
||||
- Leaving a branch open without merging.
|
||||
|
||||
---
|
||||
|
||||
## Branch Handling Exception
|
||||
|
||||
Branch creation is permitted **only** when:
|
||||
|
||||
- The task explicitly requires a feature branch, **or**
|
||||
- A direct push to `main` is blocked by branch protection.
|
||||
|
||||
If a branch is created it **must**:
|
||||
|
||||
- Follow the naming convention `<type>/<short-description>` (e.g. `fix/blog-json-schema`).
|
||||
- Be merged into `main` via PR immediately after the task is complete.
|
||||
- Be deleted after merge — never abandoned.
|
||||
Reference in New Issue
Block a user