# Gold-Rend – közösségi segítségplatform

## FreeTranslator Cortex: működő nyelvi halmazok

A fordító minden célnyelvet külön **Cortex-halmazként** kezel. Indulás után, a
felület tétlen idejében a magyar eredeti szövegek külön háttérkérésekben kerülnek
előfordításra, nyelvenként elkülönített gyorsítótárba. A felhasználó által
kiválasztott nyelv azonnal a saját halmazából olvas; soha nincs cél-nyelvből
cél-nyelvre fordítás.

- böngészőben: `localStorage` nyelvenkénti cache;
- éles Cloudflare Pages környezetben: opcionális `TRANSLATION_CACHE` KV cache,
  egyéves lejárattal;
- minden háttérkérés legfeljebb három párhuzamos nyelvi láncot használ, hogy ne
  terhelje túl a külső fordítókat;
- a `/api/translate-section` elfogadja a `target` és a `targetLanguage` mezőt is.

Diagnosztikai végpont: `/api/i18n-cortex?lang=sr` megmutatja, melyik Cortex
halmaz dolgozik és hogy a Cloudflare KV cache aktív-e. Az `/api/i18n-missing`
endpoint egy admin felületből használható a még hiányzó fordítási kulcsok
feltérképezésére.

Az éles, megosztott cache-hez hozz létre egy KV namespace-et a Cloudflare-ben,
majd a kapott azonosítóval vedd ki a kommentet a `wrangler.toml` fájl
`TRANSLATION_CACHE` blokkjáról. Addig az oldal is működik, csak a cache az adott
böngészőben marad.

### Elsődleges Microsoft fordító

A fordítási lánc első motorja az **Azure AI Translator**. A kulcsot soha ne
írd forrásfájlba vagy a böngészőbe; Cloudflare Pages secretként add meg:

```powershell
npx wrangler pages secret put AZURE_TRANSLATOR_KEY
npx wrangler pages secret put AZURE_TRANSLATOR_REGION
```

Szükség esetén az `AZURE_TRANSLATOR_ENDPOINT` is megadható. Kulcs nélkül a
rendszer ingyenes módban indul: Google GTX az első motor, utána MyMemory,
Lingva és a többi tartalék következik. A kliens 30 szöveges csomagokban,
legfeljebb három párhuzamos API-kéréssel dolgozik; a szerveroldali Cortex-magon
belül egy négyszálú munkakészlet fordítja a kártyák szövegeit.

### Cloudflare Workers AI: a 429-es hibák tartós megoldása

A nyilvános Google/MyMemory végpontok a Cloudflare közös IP-címeit gyakran
`429 Too Many Requests` hibával korlátozzák. A kód ezért támogatja a Cloudflare
Workers AI `@cf/meta/m2m100-1.2b` fordítómodellt. A használat opt-in, mert a
Cloudflare-fiók ingyenes keretén felüli AI-használat díjköteles lehet. Csak
jóváhagyott költségkerettel állítsd be Pages környezeti változóként:

```text
WORKERS_AI_TRANSLATION=true
```

### Saját Ollama Gold AI Segítő

A Gold AI Segítő az ezen a gépen már telepített `llama3.1:8b` Ollama modellt
használja. Helyi fejlesztéshez hozz létre egy nem commitolt `.dev.vars` fájlt:

```text
OLLAMA_ENDPOINT=http://127.0.0.1:11434
OLLAMA_MODEL=llama3.1:8b
```

Éles Cloudflare Pages környezetben a `OLLAMA_ENDPOINT` csak saját, HTTPS-es,
hitelesített Ollama átjáróra mutathat. A Pages nem tud közvetlenül hozzáférni
ehhez a számítógéphez vagy a `localhost` szolgáltatáshoz.

Ez a ZIP egy működő közösségi oldal alapcsomagja:

- **Tagi / Hazafiak-Tag kérdőív**
- **Segítő / Aktivista kérdőív**
- **Egyéni, szociális, jogi, közlekedési, lakhatási, munkaügyi vagy közösségi ötlet bejelentése**
- **Ézó Mag v2.1**: dátum, prioritás, határidő, település, érintettek száma és aktivista-készség alapján rendez
- **Település szerinti aktivista-javaslat**
- **Rend-Térkép / Ézó Közösségi Térkép** OpenStreetMap + Leaflet.js alapon
- **Térképes bejelentések**, markerrel, adatvédelmi helymegosztási szintekkel és kritikus ügy Rend-chat kapcsolattal
- **JSON / CSV export-import**
- **Második Ézó / Ézó Speed Translator v2**: teljes oldalnyelvi váltás az eredeti magyar szövegtárból
- **FreeTranslator-Modul 3 rétegű motor bekötése** a `functions/api/translate-section.js` végpontba
- **Cloudflare Pages + D1 előkészítés** éles többfelhasználós működéshez

## Azonnali használat

A sima `index.html` böngészőből is megnyitható, de a teljes fordító API csak Cloudflare Pages Functions alatt működik.

Helyi teszt PowerShellből:

```powershell
cd C:\EgnerRend\rendes-kozosseg-site
npm install
npm run serve
```

Ezután:

```text
http://localhost:8788
```

A `npm run serve` most már `wrangler pages dev` szervert indít, hogy a `/api/translate-section` végpont is működjön.

Statikus, API nélküli teszthez:

```powershell
npm run static
```

## Fordítási alapelv: nincs visszatorzítás

A nyelvváltó nem a képernyőn éppen látható, már lefordított szövegből dolgozik. Induláskor eltárolja az oldal eredeti magyar szövegrészeit, majd minden fordítást ebből az eredeti forrásból kér.

Magyarra váltáskor nem történik visszafordítás: a rendszer egyszerűen visszaállítja az eredeti magyar szöveget.

## FreeTranslator-Modul bekötés

A bekötött fájlok:

```text
ezo/ezo-speed-translator.js
functions/_lib/translator.js
functions/api/translate-section.js
docs/FREETRANSLATOR_BEKOTES.md
```

A 3 rétegű motor sorrendje:

1. HuggingFace / Meta NLLB-200 – opcionális `HF_TOKEN` kulccsal.
2. Google Translate GTX ingyenes végpont.
3. Lingva proxy végpont.

Ha egyik réteg sem elérhető, a szöveg magyarul marad. Ez biztonsági döntés: inkább az eredeti forrás jelenjen meg, mint egy hibás, láncban torzult fordítás.

## Rend-Térkép / Ézó Közösségi Térkép

Az oldal `#rendterkep` szakasza OpenStreetMap + Leaflet.js alapú térképet ad. Térképes bejelentés hozható létre településsel, térképre kattintott ponttal vagy saját pozícióval. A marker popup tartalmazza a címet, kategóriát, prioritást, települést, dátumot, státuszt és részletek gombot.

Fő elemek:

- szűrés település, kategória, prioritás, státusz, dátum, kritikus ügy és online aktivista szerint,
- profil láthatóság: térképen látható vagyok / nem vagyok látható,
- helymegosztási szintek: pontos hely, csak település, csak koordinátornak, csak kijelölt aktivistának,
- pontos hely alapértelmezésben nem nyilvános; a rendszer települési vagy eltolódott pontot mutat,
- Ézó prioritás, dátum, település, kategória, érintettek száma és aktivista-közelség alapján rendez,
- kritikus ügynél aktivistát javasol és Rend-chat jelzést hoz létre,
- fórumtémához is kapcsolható településalapú térképes hely,
- visszaélésvédelem: hamis bejelentés jelentése, moderátori ellenőrzés, spamgyanú pontszám.

Új D1/Functions végpontok:

```text
functions/api/map-report.js
functions/api/map-profile.js
```

A meglévő `functions/api/translate-section.js` végpont változatlanul megmarad.

## Cloudflare Pages telepítés

1. Töltsd fel ezt a mappát Cloudflare Pages projektbe.
2. Build parancs nem szükséges.
3. Build output directory: `/` vagy `.`.
4. Domain: `www.EgnerRend.info`.
5. Cloudflare DNS-ben CNAME: `www` → a Pages projekt címe.

## Opcionális fordítási cache

A `wrangler.toml` fájlban elő van készítve a KV binding:

```toml
# [[kv_namespaces]]
# binding = "TRANSLATION_CACHE"
# id = "IDE_JON_A_KV_NAMESPACE_ID"
```

Ha bekötöd, a fordítások gyorsítótárból is kiszolgálhatók.

## D1 adatbázis élesítés

A statikus verzió helyi adatot tárol. Éles közösségi használathoz D1 adatbázis kell.

```bash
npm install
npx wrangler d1 create rendes_kozosseg_db
npx wrangler d1 execute rendes_kozosseg_db --file=./schema.sql
```

A kapott `database_id` értéket írd be a `wrangler.toml` fájlba a `[[d1_databases]]` blokkhoz, majd vedd ki a kommentjelet.

## Ézó Mag logikai módosítás

A fő logika itt van:

```text
ezo/ezo-core.js
```

Fő függvények:

- `computePriority(item)` – kritikus súly / prioritás 1–100 között
- `sortCases(cases, mode)` – dátum, határidő, település vagy prioritás szerinti rendezés
- `matchVolunteers(caseItem, volunteers, cases)` – település, körzet, készség és kapacitás szerinti egyezés
- `assignCase(caseItem, volunteers, cases)` – legjobb segítő javaslata

## Adatvédelmi megjegyzés

A közösségi bejelentések érzékenyek lehetnek. Éles indulás előtt szükséges:

- adatkezelési tájékoztató,
- jogosultságkezelés adminoknak,
- moderáció,
- törlési/helyesbítési folyamat,
- spam és visszaélés elleni védelem,
- sürgősségi figyelmeztetés.

Ez az oldal nem hivatalos hatósági, jogi, egészségügyi vagy sürgősségi szolgáltatás.

## Logó

Az oldal logója az `assets/rendes-kozosseg-logo.jpg` fájl. A fejlécben és a nyitó Ézó-panelen is megjelenik.
