Compare commits
78 Commits
a74de43248
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| d4c8760007 | |||
| b8fc96ea0a | |||
| 966441e6aa | |||
| 43d66fd295 | |||
| 5afda4e953 | |||
| c6d3e2516e | |||
| 3ac4e9bb4a | |||
| eb2f6802fd | |||
| 8bb70a9af0 | |||
| 8755db3305 | |||
| 2fa1a5eb3a | |||
| 75fc2ccc3b | |||
| e44d99c7e7 | |||
| dedec93e23 | |||
| 9a120ab0d6 | |||
| 6079039f21 | |||
| 2cf4dcbdae | |||
| e9dc4a6a0d | |||
| f488a103c8 | |||
| df5eeeb00c | |||
| b581601064 | |||
| 77bc63de24 | |||
| a86684f6d1 | |||
| b82c04ce51 | |||
| df20b2fb51 | |||
| 77aaa9989e | |||
| c5a862f7ba | |||
| 3bf0060439 | |||
| a5b3b9d36f | |||
| 440cc084d3 | |||
| f9a263dd8c | |||
| fdc1a1a215 | |||
| 10ac10a92a | |||
| a9ea122ac5 | |||
| f865d549d1 | |||
| 3215694f5c | |||
| 8594393664 | |||
| b0dde481cf | |||
| 5172bfe62c | |||
| d518ad2ae4 | |||
| 62c4aee24c | |||
| d92c72a6cd | |||
| 3005e53d6e | |||
| afb5a2ac20 | |||
| 3afcf77a16 | |||
| e542bbd44a | |||
| a626defcfd | |||
| b2cb2a1a8e | |||
| 3549e8757e | |||
| 2b2baf6851 | |||
| e649373118 | |||
| f3cb8ca848 | |||
| acec840d91 | |||
| 0d5205ac94 | |||
| 1a4a9542f5 | |||
| bd319d05a5 | |||
| 2a0af148c8 | |||
| ad7a531ea0 | |||
| fd91306cb0 | |||
| 4ea7586a7f | |||
| 671ddb2b75 | |||
| 7d447bee93 | |||
| 5cc4486ab7 | |||
| 6e4b1c891c | |||
| f1f67b29dd | |||
| d568a365df | |||
| 4781e84ebc | |||
| be09564a25 | |||
| 0fc5b59d5f | |||
| 5526873a41 | |||
| d111b55de0 | |||
| 5bd3c7b398 | |||
| 3627c2c73d | |||
| 4d2f57c20c | |||
| 05719aae4e | |||
| b2a41d1a7b | |||
| 4bdef11b3c | |||
| aafb99460c |
+21
@@ -0,0 +1,21 @@
|
||||
# Dependencies
|
||||
node_modules/
|
||||
|
||||
# Tailwind build temp
|
||||
tmp.json
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Editor
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
@@ -0,0 +1,233 @@
|
||||
# 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 ← English blog posts (canonical + fallback)
|
||||
blog.es.json ← Spanish blog posts
|
||||
blog.de.json ← German blog posts
|
||||
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
|
||||
npm run build:css
|
||||
|
||||
# Watch CSS during active development
|
||||
npm run watch:css
|
||||
|
||||
# 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
|
||||
|
||||
### Language-to-file mapping
|
||||
|
||||
| Language | File loaded | Fallback |
|
||||
|---|---|---|
|
||||
| English (`en`) | `blog.json` | — |
|
||||
| Spanish (`es`) | `blog.es.json` | `blog.json` |
|
||||
| German (`de`) | `blog.de.json` | `blog.json` |
|
||||
|
||||
The loader in `index.html` fetches the language-specific file automatically when the visitor switches language. If a language file is missing or returns an error, it falls back to `blog.json` silently.
|
||||
|
||||
`blog.json` is always the **English source and fallback**. Keep all three files structurally identical — same number of posts, same order, translated content only.
|
||||
|
||||
---
|
||||
|
||||
`blog.json` (and every language variant) 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)
|
||||
|
||||
> Add to **all three files** in the same session. A post that exists in English but not in Spanish/German will silently fall back to the English version for those visitors — which is acceptable temporarily but should be resolved promptly.
|
||||
|
||||
```bash
|
||||
# 1. Pull latest
|
||||
git pull origin main
|
||||
|
||||
# 2. Backup all blog files once per session
|
||||
mkdir -p /backup
|
||||
for f in blog.json blog.es.json blog.de.json; do
|
||||
cp $f /backup/$f.$(date +%Y%m%d%H%M%S)
|
||||
done
|
||||
|
||||
# 3. Prepend new post to each language file
|
||||
# $NEW_EN, $NEW_ES, $NEW_DE must each be a valid single post object
|
||||
jq --argjson new "$NEW_EN" '. = [$new] + .' blog.json > tmp.json && mv tmp.json blog.json
|
||||
jq --argjson new "$NEW_ES" '. = [$new] + .' blog.es.json > tmp.json && mv tmp.json blog.es.json
|
||||
jq --argjson new "$NEW_DE" '. = [$new] + .' blog.de.json > tmp.json && mv tmp.json blog.de.json
|
||||
|
||||
# 4. Validate all three
|
||||
jq empty blog.json && echo "blog.json OK"
|
||||
jq empty blog.es.json && echo "blog.es.json OK"
|
||||
jq empty blog.de.json && echo "blog.de.json OK"
|
||||
|
||||
# 5. Commit and push
|
||||
git add blog.json blog.es.json blog.de.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.
|
||||
@@ -1,26 +0,0 @@
|
||||
Rollback and Recovery Changelog
|
||||
|
||||
Timestamp: ${TS}
|
||||
|
||||
Actions performed:
|
||||
- Reset main branch (working tree and HEAD) to commit 6127867d51c9f0e4e86d1d8390081208f45136ab and force-pushed to origin/main.
|
||||
- Confirmed README.md content matches version at commit 6127867d51.
|
||||
- Investigated deleted backups: located backups in parent commit 5189b23 and extracted available files into recovered_backups/ directory in the working tree (not yet committed).
|
||||
- Created this changelog and saved recovered backup files under recovered_backups/ for review.
|
||||
|
||||
Recovered backup files:
|
||||
- backups/index.html.20260324164129.bak -> recovered_backups/index.html.20260324164129.bak (extracted from commit 5189b23)
|
||||
- backups/index.html.bak.20260324164053 -> recovered_backups/index.html.bak.20260324164053 (extracted from commit 5189b23)
|
||||
|
||||
Notes on recovery:
|
||||
- The deleted backup files were present in previous commits and have been extracted from git history into recovered_backups/.
|
||||
- Additional backup files referencing other timestamps exist in git history (e.g., backups/index.html.20260324164556.bak and backups/index.html.20260324164626.bak). These can be extracted on request.
|
||||
|
||||
Suspicious findings:
|
||||
- Commit 6127867d51 (message: "Deleted Backups and changed readme") removed backup files. Author: Oliver. This commit may be responsible for missing backups. Please confirm whether this deletion was authorized.
|
||||
|
||||
Remaining tasks / recommendations:
|
||||
- Decide whether to reintroduce recovered backups into main branch. Restoring them to main will create a new commit on top of 6127867d51 (this changelog can be used), or they can be provided in a separate branch or as artifacts.
|
||||
- If you want me to commit the recovered_backups/ content and this changelog to the repository and push, confirm and I will proceed.
|
||||
- If you prefer the repository to remain exactly at 6127867d51 (no additional commits), I will not commit recovered files; instead I will provide them separately (download/attach) and leave main at the rollback state.
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
# NGO Website — ODOO4projects
|
||||
|
||||
**Project:** NGO marketing homepage and blog
|
||||
**URL:** [ngo.odoo4projects.com](https://ngo.odoo4projects.com)
|
||||
**Stack:** Static HTML · Tailwind CSS · Vanilla JS
|
||||
|
||||
---
|
||||
## BLOG POSTS
|
||||
Blog posts live in `blog.json` — do not create separate backup files.
|
||||
To add a blog post customize this command
|
||||
jq '.arrays[0] = [$NEW_JSON] + .arrays[0]' blog.json > tmp.json && mv tmp.json blog.json
|
||||
|
||||
|
||||
|
||||
## Repository Rules
|
||||
- Do not touch this readme
|
||||
- Keep the seperation of Site and the blogposts in blog.json
|
||||
Example of JSON structure for blog.json
|
||||
{
|
||||
"area": "Transparency",
|
||||
"title": "Every Peso on the Page: Ana's Ledger Story",
|
||||
"teaser": "<p>Ana replaced five notebooks with a four-stop impact ledger and now answers donor questions in seconds.</p>",
|
||||
"content": "<h3>Every peso needs a map</h3>\n<p>Ana used to juggle five notebooks and still felt blind when a donor asked where their coin landed.</p>\n<h3>Pressure points</h3>\n<p without late nights.</p>\n",
|
||||
"date": "2026-03-22"
|
||||
},
|
||||
|
||||
---
|
||||
|
||||
## Page Structure
|
||||
|
||||
| # | Block | Purpose |
|
||||
|---|-------|---------|
|
||||
| 1 | **Hero** | Headline, subheadline, free-trial CTA, key stats |
|
||||
| 2 | **Hot NGO Topics** | Three focused topic cards (transparency, communications, fundraising) |
|
||||
| 3 | **Blog** | Latest articles loaded dynamically from `blog.json` |
|
||||
| 4 | **Sign Up — Free Trial** | Email signup form, 4-week free trial, no credit card |
|
||||
| 5 | **Have a Meeting** | 30-minute consultation booking via Google Calendar |
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Languages
|
||||
|
||||
| Code | Language |
|
||||
|------|----------|
|
||||
| `en` | English (default) |
|
||||
| `es` | Español |
|
||||
| `de` | Deutsch |
|
||||
|
||||
All UI strings are managed via the inline `translations` object in `index.html`.
|
||||
File diff suppressed because one or more lines are too long
@@ -1,23 +0,0 @@
|
||||
[
|
||||
{
|
||||
"insert_at_top": true,
|
||||
"title": "Reduce NGO Admin by 20–40%: 7 Workflows You Can Automate This Month",
|
||||
"slug": "reduce-ngo-admin-by-20-40-7-workflows-automate-this-month",
|
||||
"date": "2026-03-25",
|
||||
"author": "Odoo4Projects NGO Team",
|
||||
"tags": ["NGO", "automation", "workflows", "productivity"],
|
||||
"hero_image": "/images/blog/reduce-ngo-admin.jpg",
|
||||
"excerpt": "Cut admin time 20–40% with seven practical automations using Odoo and n8n—fewer forms, faster reports, more mission time.",
|
||||
"content": "\"Maria runs a small education NGO and spent nights buried in paperwork, donor emails, and overlapping spreadsheets. She often cried quietly at the kitchen table, knowing every hour spent on admin was an hour taken from the children she serves.\"\n\nMaria’s problem is common: scattered information, repeated manual steps, and slow acknowledgements that frustrate donors and staff alike. An ERP system gives you one single place for contacts, donations, invoices, and project tasks so people stop copying the same data into five different tools. With templates and central records the chance for mistakes falls, approvals move faster, and regular reports are generated automatically so leaders can see the big picture without hunting through files.\n\nPut simply, Odoo becomes the central hub and n8n runs the glue that connects the tools you already use. Use Odoo for Contacts, Donations (or Sales/Invoices), Projects, and Documents; then create n8n workflows to trigger automatic donor receipts, update contact records when forms are submitted, schedule follow-up tasks, and push summary reports to Slack or email. These automations remove repeated typing, erase copy/paste errors, and make sure no donor message goes unanswered—freeing up coordinators to focus on program work. Expect clear time savings: common NGO implementations show 20–40% fewer administrative hours within weeks by removing routine manual steps and automating reminders and acknowledgements.\n\n\"After we set up Odoo and a few n8n flows, Maria’s team stopped doing nightly admin sprints and began checking a single dashboard each morning. She now spends time coaching teachers, visiting communities, and planning programs instead of reconciling spreadsheets, and her staff feel calmer and more productive.\"\n\nBook a meeting: https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3DDbaiHFlhNhWySszAQoPXE_H73QLqYT3w7H9IYWC76RA_TgNIhLESjb4N7ep_D2D_OyW9q4-c",
|
||||
"meta_description": "Cut NGO admin 20–40% fast with 7 Odoo + n8n automations—faster donor receipts, fewer spreadsheets, more mission time.",
|
||||
"seo_keywords": ["NGO automation", "reduce admin NGO", "Odoo for NGOs", "n8n workflows", "NGO productivity"],
|
||||
"seo_summary": "Expected impact: Reduce routine administrative hours by 20–40% within weeks through practical automations.\nAddresses common NGO pain points: duplicated data, slow acknowledgements, and time lost to manual reporting."
|
||||
},
|
||||
{
|
||||
"area": "Donor Communication",
|
||||
"title": "How Maya Turned Donor Chaos into Clear Connections",
|
||||
"teaser": "<p>Maya transformed scattered donor messages into a smooth, trustworthy flow that grows support.</p>",
|
||||
"content": "<h3>From scattered emails to a single view</h3>\n<p>Maya used to juggle spreadsheets, inbox threads, and sticky notes, trying to track donor interactions. Messages were missed, thank-yous delayed, and trust wavered.</p>\n<h3>Organizing the donor journey</h3>\n<p>She mapped every donor touchpoint: initial contact, donation, follow-ups, renewals, and special campaigns.</p>\n<p>Each interaction got a card in Odoo showing donor, date, preferred channel, and notes.</p>\n<h3>Automated touchpoints</h3>\n<p>n8n automates reminders: thank donors, confirm gifts, and ping staff before renewals. No one misses a beat, and personalization stays intact.</p>\n<h3>Transparency everywhere</h3>\n<p>Donors can see updates on projects they supported. Status labels on campaigns show funds allocated, impact stories, and upcoming events.</p>\n<p>Staff leave notes visible to colleagues, so no duplicate outreach or awkward overlaps happen.</p>\n<h3>Visual dashboards</h3>\n<p>A live dashboard shows donor activity, upcoming renewals, and campaign health. Color codes indicate priority: green for confirmed gifts, yellow for pending pledges, red for urgent follow-ups.</p>\n<h3>Communication rhythm</h3>\n<p>Weekly donor check-ins keep the team aligned. Monthly newsletters highlight wins, donor impact, and upcoming opportunities. Special campaigns trigger micro-emails personalized by giving level.</p>\n<ul>\n <li>Monday: review new donors and pending follow-ups.</li>\n <li>Wednesday: confirm campaign progress and donor notes.</li>\n <li>Friday: send thank-you emails and impact updates.</li>\n</ul>\n<h3>Metrics & impact</h3>\n<p>Donor retention improved by 25%.</p>\n<p>Response times dropped from days to hours.</p>\n<p>Staff report feeling less stressed because communication is predictable and visible.</p>\n<h3>Rollout plan</h3>\n<ul>\n <li>Import all donor records into Odoo cards and tag owners.</li>\n <li>Set n8n alerts for gifts, follow-ups, and renewals.</li>\n <li>Create dashboards showing active donors, pledges, and campaign status.</li>\n <li>Automate thank-you emails and impact updates.</li>\n</ul>\n<p>This replaces weeks of scattered emails and missed opportunities.</p>\n<p><strong>Micro-CTA:</strong> Want Maya’s donor management template? Reply “connect” and we’ll send the setup guide.</p>\n<h3>Story beats returned</h3>\n<p>The organization still hustles, but now each donor feels seen, valued, and in the loop. Maya smiles at every timely thank-you that lands without chasing anyone.</p>\n<h3>Your invitation</h3>\n<p>Subscribe to the NGO ops newsletter or book a donor communication clinic. We’ll map your donor flow, load it into Odoo, wire n8n alerts, and leave you with clear, trustworthy connections you can maintain effortlessly.</p>",
|
||||
"date": "2026-03-25"
|
||||
}
|
||||
]
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1 @@
|
||||
google-site-verification: google261cafffa78d8c3d.html
|
||||
+114
@@ -0,0 +1,114 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g transform="matrix(1,0,0,1,-1152,-256)">
|
||||
<rect id="Icons" x="0" y="0" width="1280" height="800" style="fill:none;"/>
|
||||
<g id="Icons1" serif:id="Icons">
|
||||
<g id="Strike">
|
||||
</g>
|
||||
<g id="H1">
|
||||
</g>
|
||||
<g id="H2">
|
||||
</g>
|
||||
<g id="H3">
|
||||
</g>
|
||||
<g id="list-ul">
|
||||
</g>
|
||||
<g id="hamburger-1">
|
||||
</g>
|
||||
<g id="hamburger-2">
|
||||
</g>
|
||||
<g id="list-ol">
|
||||
</g>
|
||||
<g id="list-task">
|
||||
</g>
|
||||
<g id="trash">
|
||||
</g>
|
||||
<g id="vertical-menu">
|
||||
</g>
|
||||
<g id="horizontal-menu">
|
||||
</g>
|
||||
<g id="sidebar-2">
|
||||
</g>
|
||||
<g id="Pen">
|
||||
</g>
|
||||
<g id="Pen1" serif:id="Pen">
|
||||
</g>
|
||||
<g id="clock">
|
||||
</g>
|
||||
<g id="external-link">
|
||||
</g>
|
||||
<g id="hr">
|
||||
</g>
|
||||
<g id="info">
|
||||
</g>
|
||||
<g id="warning">
|
||||
</g>
|
||||
<g id="plus-circle">
|
||||
</g>
|
||||
<g id="minus-circle">
|
||||
</g>
|
||||
<g id="vue">
|
||||
</g>
|
||||
<g id="cog">
|
||||
</g>
|
||||
<g id="logo">
|
||||
</g>
|
||||
<g id="radio-check">
|
||||
</g>
|
||||
<g id="eye-slash">
|
||||
</g>
|
||||
<g id="eye">
|
||||
</g>
|
||||
<g id="toggle-off">
|
||||
</g>
|
||||
<g id="shredder">
|
||||
</g>
|
||||
<g id="spinner--loading--dots-" serif:id="spinner [loading, dots]">
|
||||
</g>
|
||||
<g id="react">
|
||||
</g>
|
||||
<g id="check-selected">
|
||||
</g>
|
||||
<g id="turn-off">
|
||||
</g>
|
||||
<g id="code-block">
|
||||
</g>
|
||||
<g id="user">
|
||||
</g>
|
||||
<g id="coffee-bean">
|
||||
</g>
|
||||
<g transform="matrix(0.638317,0.368532,-0.368532,0.638317,785.021,-208.975)">
|
||||
<g id="coffee-beans">
|
||||
<g id="coffee-bean1" serif:id="coffee-bean">
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="coffee-bean-filled" transform="matrix(0.866025,0.5,-0.5,0.866025,717.879,-387.292)">
|
||||
<g transform="matrix(1,0,0,1,0,-0.699553)">
|
||||
<path d="M737.673,328.231C738.494,328.056 739.334,328.427 739.757,329.152C739.955,329.463 740.106,329.722 740.106,329.722C740.106,329.722 745.206,338.581 739.429,352.782C737.079,358.559 736.492,366.083 738.435,371.679C738.697,372.426 738.482,373.258 737.89,373.784C737.298,374.31 736.447,374.426 735.735,374.077C730.192,371.375 722.028,365.058 722.021,352C722.015,340.226 728.812,330.279 737.673,328.231Z"/>
|
||||
</g>
|
||||
<g transform="matrix(-1,0,0,-1,1483.03,703.293)">
|
||||
<path d="M737.609,328.246C738.465,328.06 739.344,328.446 739.785,329.203C739.97,329.49 740.106,329.722 740.106,329.722C740.106,329.722 745.206,338.581 739.429,352.782C737.1,358.507 736.503,365.948 738.383,371.527C738.646,372.304 738.415,373.164 737.796,373.703C737.177,374.243 736.294,374.356 735.56,373.989C730.02,371.241 722.028,364.92 722.021,352C722.016,340.255 728.779,330.328 737.609,328.246Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.638317,0.368532,-0.368532,0.638317,913.062,-208.975)">
|
||||
<g id="coffee-beans-filled">
|
||||
<g id="coffee-bean2" serif:id="coffee-bean">
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="clipboard">
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,128.011,1.35415)">
|
||||
<g id="clipboard-paste">
|
||||
</g>
|
||||
</g>
|
||||
<g id="clipboard-copy">
|
||||
</g>
|
||||
<g id="Layer1">
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
@@ -0,0 +1,224 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
|
||||
<svg
|
||||
fill="#000000"
|
||||
width="800px"
|
||||
height="800px"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
xml:space="preserve"
|
||||
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"
|
||||
id="svg6"
|
||||
sodipodi:docname="bean_dark_Roast.svg"
|
||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:serif="http://www.serif.com/"><defs
|
||||
id="defs6" /><sodipodi:namedview
|
||||
id="namedview6"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="1.075"
|
||||
inkscape:cx="400"
|
||||
inkscape:cy="400"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1129"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg6" />
|
||||
<g
|
||||
transform="matrix(1,0,0,1,-1152,-256)"
|
||||
id="g6">
|
||||
<rect
|
||||
id="Icons"
|
||||
x="0"
|
||||
y="0"
|
||||
width="1280"
|
||||
height="800"
|
||||
style="fill:none;" />
|
||||
<g
|
||||
id="Icons1"
|
||||
serif:id="Icons">
|
||||
<g
|
||||
id="Strike">
|
||||
</g>
|
||||
<g
|
||||
id="H1">
|
||||
</g>
|
||||
<g
|
||||
id="H2">
|
||||
</g>
|
||||
<g
|
||||
id="H3">
|
||||
</g>
|
||||
<g
|
||||
id="list-ul">
|
||||
</g>
|
||||
<g
|
||||
id="hamburger-1">
|
||||
</g>
|
||||
<g
|
||||
id="hamburger-2">
|
||||
</g>
|
||||
<g
|
||||
id="list-ol">
|
||||
</g>
|
||||
<g
|
||||
id="list-task">
|
||||
</g>
|
||||
<g
|
||||
id="trash">
|
||||
</g>
|
||||
<g
|
||||
id="vertical-menu">
|
||||
</g>
|
||||
<g
|
||||
id="horizontal-menu">
|
||||
</g>
|
||||
<g
|
||||
id="sidebar-2">
|
||||
</g>
|
||||
<g
|
||||
id="Pen">
|
||||
</g>
|
||||
<g
|
||||
id="Pen1"
|
||||
serif:id="Pen">
|
||||
</g>
|
||||
<g
|
||||
id="clock">
|
||||
</g>
|
||||
<g
|
||||
id="external-link">
|
||||
</g>
|
||||
<g
|
||||
id="hr">
|
||||
</g>
|
||||
<g
|
||||
id="info">
|
||||
</g>
|
||||
<g
|
||||
id="warning">
|
||||
</g>
|
||||
<g
|
||||
id="plus-circle">
|
||||
</g>
|
||||
<g
|
||||
id="minus-circle">
|
||||
</g>
|
||||
<g
|
||||
id="vue">
|
||||
</g>
|
||||
<g
|
||||
id="cog">
|
||||
</g>
|
||||
<g
|
||||
id="logo">
|
||||
</g>
|
||||
<g
|
||||
id="radio-check">
|
||||
</g>
|
||||
<g
|
||||
id="eye-slash">
|
||||
</g>
|
||||
<g
|
||||
id="eye">
|
||||
</g>
|
||||
<g
|
||||
id="toggle-off">
|
||||
</g>
|
||||
<g
|
||||
id="shredder">
|
||||
</g>
|
||||
<g
|
||||
id="spinner--loading--dots-"
|
||||
serif:id="spinner [loading, dots]">
|
||||
</g>
|
||||
<g
|
||||
id="react">
|
||||
</g>
|
||||
<g
|
||||
id="check-selected">
|
||||
</g>
|
||||
<g
|
||||
id="turn-off">
|
||||
</g>
|
||||
<g
|
||||
id="code-block">
|
||||
</g>
|
||||
<g
|
||||
id="user">
|
||||
</g>
|
||||
<g
|
||||
id="coffee-bean">
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.638317,0.368532,-0.368532,0.638317,785.021,-208.975)"
|
||||
id="g1">
|
||||
<g
|
||||
id="coffee-beans">
|
||||
<g
|
||||
id="coffee-bean1"
|
||||
serif:id="coffee-bean">
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="coffee-bean-filled"
|
||||
transform="matrix(0.866025,0.5,-0.5,0.866025,717.879,-387.292)">
|
||||
<g
|
||||
transform="matrix(1,0,0,1,0,-0.699553)"
|
||||
id="g2">
|
||||
<path
|
||||
d="M737.673,328.231C738.494,328.056 739.334,328.427 739.757,329.152C739.955,329.463 740.106,329.722 740.106,329.722C740.106,329.722 745.206,338.581 739.429,352.782C737.079,358.559 736.492,366.083 738.435,371.679C738.697,372.426 738.482,373.258 737.89,373.784C737.298,374.31 736.447,374.426 735.735,374.077C730.192,371.375 722.028,365.058 722.021,352C722.015,340.226 728.812,330.279 737.673,328.231Z"
|
||||
id="path1"
|
||||
style="fill:#3e2723;fill-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-1,0,0,-1,1483.03,703.293)"
|
||||
id="g3">
|
||||
<path
|
||||
d="M737.609,328.246C738.465,328.06 739.344,328.446 739.785,329.203C739.97,329.49 740.106,329.722 740.106,329.722C740.106,329.722 745.206,338.581 739.429,352.782C737.1,358.507 736.503,365.948 738.383,371.527C738.646,372.304 738.415,373.164 737.796,373.703C737.177,374.243 736.294,374.356 735.56,373.989C730.02,371.241 722.028,364.92 722.021,352C722.016,340.255 728.779,330.328 737.609,328.246Z"
|
||||
id="path2"
|
||||
style="stroke:#3e2723;stroke-opacity:1;fill:#3e2723;fill-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.638317,0.368532,-0.368532,0.638317,913.062,-208.975)"
|
||||
id="g4">
|
||||
<g
|
||||
id="coffee-beans-filled">
|
||||
<g
|
||||
id="coffee-bean2"
|
||||
serif:id="coffee-bean">
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="clipboard">
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(1,0,0,1,128.011,1.35415)"
|
||||
id="g5">
|
||||
<g
|
||||
id="clipboard-paste">
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="clipboard-copy">
|
||||
</g>
|
||||
<g
|
||||
id="Layer1">
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.4 KiB |
@@ -0,0 +1,224 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
|
||||
<svg
|
||||
fill="#000000"
|
||||
width="800px"
|
||||
height="800px"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
xml:space="preserve"
|
||||
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"
|
||||
id="svg6"
|
||||
sodipodi:docname="bean_light_brown.svg"
|
||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:serif="http://www.serif.com/"><defs
|
||||
id="defs6" /><sodipodi:namedview
|
||||
id="namedview6"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="1.075"
|
||||
inkscape:cx="400"
|
||||
inkscape:cy="400"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1129"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg6" />
|
||||
<g
|
||||
transform="matrix(1,0,0,1,-1152,-256)"
|
||||
id="g6">
|
||||
<rect
|
||||
id="Icons"
|
||||
x="0"
|
||||
y="0"
|
||||
width="1280"
|
||||
height="800"
|
||||
style="fill:none;" />
|
||||
<g
|
||||
id="Icons1"
|
||||
serif:id="Icons">
|
||||
<g
|
||||
id="Strike">
|
||||
</g>
|
||||
<g
|
||||
id="H1">
|
||||
</g>
|
||||
<g
|
||||
id="H2">
|
||||
</g>
|
||||
<g
|
||||
id="H3">
|
||||
</g>
|
||||
<g
|
||||
id="list-ul">
|
||||
</g>
|
||||
<g
|
||||
id="hamburger-1">
|
||||
</g>
|
||||
<g
|
||||
id="hamburger-2">
|
||||
</g>
|
||||
<g
|
||||
id="list-ol">
|
||||
</g>
|
||||
<g
|
||||
id="list-task">
|
||||
</g>
|
||||
<g
|
||||
id="trash">
|
||||
</g>
|
||||
<g
|
||||
id="vertical-menu">
|
||||
</g>
|
||||
<g
|
||||
id="horizontal-menu">
|
||||
</g>
|
||||
<g
|
||||
id="sidebar-2">
|
||||
</g>
|
||||
<g
|
||||
id="Pen">
|
||||
</g>
|
||||
<g
|
||||
id="Pen1"
|
||||
serif:id="Pen">
|
||||
</g>
|
||||
<g
|
||||
id="clock">
|
||||
</g>
|
||||
<g
|
||||
id="external-link">
|
||||
</g>
|
||||
<g
|
||||
id="hr">
|
||||
</g>
|
||||
<g
|
||||
id="info">
|
||||
</g>
|
||||
<g
|
||||
id="warning">
|
||||
</g>
|
||||
<g
|
||||
id="plus-circle">
|
||||
</g>
|
||||
<g
|
||||
id="minus-circle">
|
||||
</g>
|
||||
<g
|
||||
id="vue">
|
||||
</g>
|
||||
<g
|
||||
id="cog">
|
||||
</g>
|
||||
<g
|
||||
id="logo">
|
||||
</g>
|
||||
<g
|
||||
id="radio-check">
|
||||
</g>
|
||||
<g
|
||||
id="eye-slash">
|
||||
</g>
|
||||
<g
|
||||
id="eye">
|
||||
</g>
|
||||
<g
|
||||
id="toggle-off">
|
||||
</g>
|
||||
<g
|
||||
id="shredder">
|
||||
</g>
|
||||
<g
|
||||
id="spinner--loading--dots-"
|
||||
serif:id="spinner [loading, dots]">
|
||||
</g>
|
||||
<g
|
||||
id="react">
|
||||
</g>
|
||||
<g
|
||||
id="check-selected">
|
||||
</g>
|
||||
<g
|
||||
id="turn-off">
|
||||
</g>
|
||||
<g
|
||||
id="code-block">
|
||||
</g>
|
||||
<g
|
||||
id="user">
|
||||
</g>
|
||||
<g
|
||||
id="coffee-bean">
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.638317,0.368532,-0.368532,0.638317,785.021,-208.975)"
|
||||
id="g1">
|
||||
<g
|
||||
id="coffee-beans">
|
||||
<g
|
||||
id="coffee-bean1"
|
||||
serif:id="coffee-bean">
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="coffee-bean-filled"
|
||||
transform="matrix(0.866025,0.5,-0.5,0.866025,717.879,-387.292)">
|
||||
<g
|
||||
transform="matrix(1,0,0,1,0,-0.699553)"
|
||||
id="g2">
|
||||
<path
|
||||
d="M737.673,328.231C738.494,328.056 739.334,328.427 739.757,329.152C739.955,329.463 740.106,329.722 740.106,329.722C740.106,329.722 745.206,338.581 739.429,352.782C737.079,358.559 736.492,366.083 738.435,371.679C738.697,372.426 738.482,373.258 737.89,373.784C737.298,374.31 736.447,374.426 735.735,374.077C730.192,371.375 722.028,365.058 722.021,352C722.015,340.226 728.812,330.279 737.673,328.231Z"
|
||||
id="path1"
|
||||
style="fill:#5d4037;fill-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-1,0,0,-1,1483.03,703.293)"
|
||||
id="g3">
|
||||
<path
|
||||
d="M737.609,328.246C738.465,328.06 739.344,328.446 739.785,329.203C739.97,329.49 740.106,329.722 740.106,329.722C740.106,329.722 745.206,338.581 739.429,352.782C737.1,358.507 736.503,365.948 738.383,371.527C738.646,372.304 738.415,373.164 737.796,373.703C737.177,374.243 736.294,374.356 735.56,373.989C730.02,371.241 722.028,364.92 722.021,352C722.016,340.255 728.779,330.328 737.609,328.246Z"
|
||||
id="path2"
|
||||
style="stroke:#5d4037;stroke-opacity:1;fill:#5d4037;fill-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.638317,0.368532,-0.368532,0.638317,913.062,-208.975)"
|
||||
id="g4">
|
||||
<g
|
||||
id="coffee-beans-filled">
|
||||
<g
|
||||
id="coffee-bean2"
|
||||
serif:id="coffee-bean">
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="clipboard">
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(1,0,0,1,128.011,1.35415)"
|
||||
id="g5">
|
||||
<g
|
||||
id="clipboard-paste">
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="clipboard-copy">
|
||||
</g>
|
||||
<g
|
||||
id="Layer1">
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 115 KiB |
+116
@@ -0,0 +1,116 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="124.8711mm"
|
||||
height="31.440542mm"
|
||||
viewBox="0 0 124.8711 31.440542"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||
sodipodi:docname="logo.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="0.70021044"
|
||||
inkscape:cx="329.90082"
|
||||
inkscape:cy="345.61039"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1046"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1" />
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-17.727083,-56.885417)">
|
||||
<g
|
||||
id="g5"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,-67.310852,25.675979)">
|
||||
<text
|
||||
id="text5"
|
||||
xml:space="preserve"
|
||||
transform="matrix(1.3333333,0,0,1.3333333,316.00667,186.29426)"><tspan
|
||||
id="tspan5"
|
||||
style="font-variant:normal;font-weight:700;font-size:65.991px;font-family:'Noto Sans';writing-mode:lr-tb;fill:#3e2723;fill-opacity:1;fill-rule:nonzero;stroke:#3e2723;stroke-width:2.19965;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="0"
|
||||
y="0">my</tspan></text>
|
||||
<text
|
||||
id="text6"
|
||||
xml:space="preserve"
|
||||
transform="matrix(1.3333333,0,0,1.3333333,452.48533,186.29426)"><tspan
|
||||
id="tspan6"
|
||||
style="font-variant:normal;font-weight:700;font-size:65.991px;font-family:'Noto Sans';writing-mode:lr-tb;fill:#e65100;fill-opacity:1;fill-rule:nonzero;stroke:#e65100;stroke-width:2.19965;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="0"
|
||||
y="0">-</tspan></text>
|
||||
<text
|
||||
id="text7"
|
||||
xml:space="preserve"
|
||||
transform="matrix(1.3333333,0,0,1.3333333,480.79333,186.29426)"><tspan
|
||||
id="tspan7"
|
||||
style="font-variant:normal;font-weight:700;font-size:65.991px;font-family:'Noto Sans';writing-mode:lr-tb;fill:#3e2723;fill-opacity:1;fill-rule:nonzero;stroke:#3e2723;stroke-width:2.19965;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="0"
|
||||
y="0">biz</tspan></text>
|
||||
<text
|
||||
id="text8"
|
||||
xml:space="preserve"
|
||||
transform="matrix(1.3333333,0,0,1.3333333,606.236,186.29426)"><tspan
|
||||
id="tspan8"
|
||||
style="font-variant:normal;font-weight:700;font-size:65.991px;font-family:'Noto Sans';writing-mode:lr-tb;fill:#e65100;fill-opacity:1;fill-rule:nonzero;stroke:#e65100;stroke-width:2.19965;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="0"
|
||||
y="0">.app</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g8"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,-67.310852,25.675979)">
|
||||
<path
|
||||
id="path8"
|
||||
d="M 249.449,279.212 H 391.181"
|
||||
style="fill:none;stroke:#e65100;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,595.27559)" />
|
||||
</g>
|
||||
<g
|
||||
id="g9"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,-67.310852,25.675979)">
|
||||
<path
|
||||
id="path9"
|
||||
d="M 442.205,279.212 H 583.937"
|
||||
style="fill:none;stroke:#e65100;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,595.27559)" />
|
||||
</g>
|
||||
<g
|
||||
id="g10"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,-67.310852,25.675979)">
|
||||
<path
|
||||
id="path10"
|
||||
d="m 420.661,289.332 c 0.369,-0.114 0.596,-0.454 0.596,-0.822 0.028,-0.171 0.028,-0.284 0.028,-0.284 0,0 -0.028,-4.535 -5.386,-8.702 -2.182,-1.701 -4.053,-4.451 -4.564,-7.03 -0.056,-0.34 -0.311,-0.624 -0.652,-0.681 -0.368,-0.085 -0.708,0.057 -0.907,0.369 -1.53,2.268 -3.259,6.491 -0.368,11.48 2.608,4.536 7.427,6.832 11.253,5.67 z"
|
||||
style="fill:#3e2723;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,595.27559)" />
|
||||
<path
|
||||
id="path11"
|
||||
d="m 413.121,269.376 c -0.368,0.141 -0.623,0.482 -0.623,0.85 0,0.17 0,0.284 0,0.284 0,0 0,4.535 5.357,8.702 2.154,1.672 4.054,4.394 4.564,6.945 0.057,0.368 0.34,0.623 0.709,0.708 0.34,0.057 0.708,-0.085 0.907,-0.396 1.53,-2.268 3.174,-6.463 0.34,-11.424 -2.608,-4.507 -7.399,-6.803 -11.254,-5.669 z"
|
||||
style="fill:#3e2723;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,595.27559)" />
|
||||
<path
|
||||
id="path12"
|
||||
d="m 413.121,269.376 c -0.368,0.141 -0.623,0.482 -0.623,0.85 0,0.17 0,0.284 0,0.284 0,0 0,4.535 5.357,8.702 2.154,1.672 4.054,4.394 4.564,6.945 0.057,0.368 0.34,0.623 0.709,0.708 0.34,0.057 0.708,-0.085 0.907,-0.396 1.53,-2.268 3.174,-6.463 0.34,-11.424 -2.608,-4.507 -7.399,-6.803 -11.254,-5.669 z"
|
||||
style="fill:none;stroke:#3e2723;stroke-width:0.4428;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,595.27559)" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.8 KiB |
+4549
-501
File diff suppressed because it is too large
Load Diff
Generated
-1027
File diff suppressed because it is too large
Load Diff
@@ -1,20 +0,0 @@
|
||||
{
|
||||
"name": "ngo",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git@git.odoo4projects.com:Oliver/NGO.git"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"type": "commonjs",
|
||||
"devDependencies": {
|
||||
"tailwindcss": "^3.4.17"
|
||||
}
|
||||
}
|
||||
+47
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"area": "CRM", "Vertical": "NGO", "date": "2026-05-04", "title": "Impact Reporting in Minutes", "teaser": "Small NGOs waste countless hours turning donor data into reports—instead of serving those they’re meant to help.", "content": "<article>\n<h2>Impact Reporting in Minutes</h2>\n<p style=\"margin: 0; color: #374151;\">— \"Maria stared at her screen at 11 p.m., three days before the grant deadline. Her donor database had 872 entries. Excel had 14 tabs. She hadnt slept in 36 hours. Every email from a donor—How was the clean water project?—demanded a new report. She couldnt tell them. Not without weeks of work. <strong>Spreadsheets</strong> were drowning her. <strong>Manual reporting</strong> was stealing her purpose. And worst of all—she knew donors were slipping away, not because her work wasn’t impactful, but because she couldn’t prove it.\" —</p>\n\n<p style=\"margin: 0; color: #374151;\">Modern digital tools can transform how NGOs capture and communicate impact. Automated systems can pull data from donations, program logs, and field reports into unified dashboards. Reports once built by hand can now be generated with a single click, reducing errors, saving weeks of labor, and preserving the emotional integrity of the stories behind the numbers.</p>\n\n<h3>Stop drowning in spreadsheets. Start telling stories.</h3>\n<p style=\"margin: 0; color: #374151;\">When your team spends 20 hours a week just compiling donor data, you’re not serving beneficiaries—you’re serving Excel. Automated reporting tools reset that balance. They sync with your existing donation platforms, track program outcomes across locations, and turn fragmented inputs into cohesive, real-time narratives that donors actually read.</p>\n\n<h3>Trust isn’t built with PDFs. It’s built with clarity.</h3>\n<p style=\"margin: 0; color: #374151;\">Donors don’t want line items. They want to know lives changed. A clean, automated dashboard shows a child’s progress in school, not just the $50 spent on textbooks. When you can show, not tell, donors see their values reflected in real results. That’s how <strong>retention grows</strong>—not through emails begging for more, but through transparency that feels genuine.</p>\n\n<h3>Proof that matters. Without the panic.</h3>\n<p style=\"margin: 0; color: #374151;\">Grant applications and board reviews require compliance—not creativity. When audit season rolls around, having pre-built, audit-ready templates means your finance lead isn’t working through the night. No more frantic last-minute data fixes. Just a few clicks, and your compliance is done. That peace of mind? It’s priceless.</p>\n\n<div class=\"video-container\" style=\"display: flex; margin: 2rem 0; gap: 2rem;\">\n <div class=\"video-text\" style=\"flex: 1;\">\n <p style=\"margin: 0; color: #374151;\">This is how you generate an impact report for your donors—no more spreadsheets, no more stress. Just one click, and your story goes live.</p>\n </div>\n <div class=\"video-player\" style=\"flex: 1; min-width: 300px; height: 300px;\">\n <iframe width=\"100%\" height=\"100%\"\n src=\"https://www.youtube.com/embed/huVrXvkCAqg\"\n title=\"YouTube video player\"\n frameborder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen\n style=\"width: 100%; height: 100%; border-radius: 8px;\">\n </iframe>\n </div>\n</div>\n\n<p style=\"margin: 0; color: #374151;\"><em>Remember: Every hour you spend wrestling with data is an hour taken from the field, the classroom, the clinic.</em></p>\n\n<a class=\"cta\" href=\"https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3DDbaiHFlhNhWySszAQoPXE_H73QLqYT3w7H9IYWC76RA_TgNIhLESjb4N7ep_D2D_OyW9q4-c\">When you want to explore how this could work for your organization, you can book a meeting here:</a>\n</article>", "image": "ngo_office3"}
|
||||
@@ -1,17 +0,0 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
body {
|
||||
font-family: 'Inter', 'Segoe UI', system-ui, sans-serif;
|
||||
}
|
||||
|
||||
#lang-selector {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
#lang-selector:focus,
|
||||
#lang-selector:focus-visible {
|
||||
color: #201824;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
+1630
File diff suppressed because it is too large
Load Diff
@@ -1,27 +0,0 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
content: ['./index.html'],
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
'brand-ink': '#201824',
|
||||
'brand-primary': '#603F57',
|
||||
'brand-accent': '#F762B4',
|
||||
'brand-sunrise': '#F8B84A',
|
||||
'brand-emerald': '#39B982',
|
||||
'brand-snow': '#F5F2F7',
|
||||
'brand-smoke': '#E5DCE8'
|
||||
},
|
||||
fontFamily: {
|
||||
brand: ['Inter', 'Segoe UI', 'system-ui', 'sans-serif']
|
||||
},
|
||||
boxShadow: {
|
||||
brand: '0 20px 60px rgba(32, 24, 36, 0.15)'
|
||||
},
|
||||
backgroundImage: {
|
||||
'hero-gradient': 'radial-gradient(circle at top left, rgba(247,98,180,0.35), rgba(32,24,36,0.95))'
|
||||
}
|
||||
}
|
||||
},
|
||||
plugins: []
|
||||
};
|
||||
Reference in New Issue
Block a user