Operating context for Claude Code on this repo. Read it at the start of every session opened in this folder.
restoniproperties is a standalone project. It has no relationship to the Joba
job platform (d:\WebProjects-CLEAN\joba), to dionysistsipiras, or to any other
repo on this machine.
None of Joba's rules apply here. Specifically:
Why this section exists: for a period both repos were open in a single multi-root VS Code workspace, which put them in one Claude session sharing one set of project instructions and one memory store. On 01/08/2026 a "wrap up" typed while working on Restoni triggered Joba's database backup script. Since 02/08/2026 each project opens in its own VS Code window. If you ever find both folders in scope again: never run one project's script from another project's context, and confirm which project a command targets before acting on any standing rule.
Restoni (restoni.com) — premium short-term vacation rentals in Greece across Mykonos, Tinos, the Athenian Riviera and the Peloponnese. Villas, apartments and stays booked direct rather than through an OTA ("Why book direct", "Best price guaranteed" are recurring page themes).
netlify.toml, publish directory _site, Node 20./admin (admin/config.yml). Their guide is
docs/restoni-editor-guide.md — keep it in sync when the admin changes.npm run build # eleventy && node tools/build-greek.js
npm run serve # eleventy --serve
npm run check # node tools/voice-check.js — copy rules, see §3
Run npm run check after touching any Greek copy. It reads both
tools/translations.json and the legacy GR dictionary in js/main.js, and fails
(exit 1) on second-person singular or on an em dash. It exists because both rules had
already been broken once each: four strings had slipped into «εσύ», and js/main.js
was never in strip-emdash.js's sweep list, so its keys had drifted away from the
swept HTML.
The Greek site is generated at build time, not authored by hand — the build is
two steps and the second one is not optional. Netlify runs the same pair
(npx @11ty/eleventy && node tools/build-greek.js). If you change the build command
in one place, change it in the other.
English is primary. Greek lives at /gr/… and is generated (see §4).
«Ανακαλύψτε», «σας προσφέρει», «Αξιοποιήστε στο έπακρο το ακίνητό σας», «Κλείστε απευθείας μαζί μας». Never the informal singular.
Why: these are luxury short-term rentals for an international audience, where distance reads as respect and professionalism. Joba mandates the opposite («εσύ») — do not carry that habit across.
«Villa Irilia», «Tinos Olive Mill House», «Blue Studio», «Aloria Mansion» — never «Βίλα Ιρίλια». They are brand names, not descriptions. Owner rule, 01/08/2026.
This has broken before: tools/build-greek.js does global exact-match replacement on
text nodes, and because titles are split across elements
(<h1>Tinos <em>Olive Mill House</em></h1>), the «Tinos» that correctly translates
as a destination in the menu also fired inside the property name, producing «Τήνος
Olive Mill House» and «Αθηναϊκή Ριβιέρα Lux Flat».
How to keep it fixed:
translate="no" attribute, and the <h1> in
_includes/layouts/property.njk carries it, so that subtree is skipped.translate="no".tools/translations.json that is part of a property name
(«Villa», «Studio», «Mansion», «Élite Estate», «Alta Mare», «Irilia», …).No «—» in any visitor-visible string, Greek or English: prose, meta descriptions, placeholders, alt text. Use a comma, period, colon, parentheses, or «·». En dash «–» is fine for ranges (2–4 guests). Code comments are exempt.
tools/strip-emdash.js sweeps root *.html, _includes/**, content/**,
tools/translations.json και llms.txt if the rule slips.
Prefer complete, warm, conversational sentences over compressed fragments.
/gr/ buildFull design and rationale: docs/greek-seo-build-plan.md. The short version:
The site was bilingual only for visitors — a JS dictionary in js/main.js swapped
text on one English URL, which Google cannot see, so Greek search traffic was zero.
The fix generates real, indexable Greek pages at restoni.com/gr/….
tools/translations.json is the single source of truth for translations
(GR / PH / META dictionaries, extracted from js/main.js).tools/build-greek.js runs after Eleventy over _site/ and writes a Greek twin of
every English page: translated text nodes, <html lang="el">, root-absolute asset
paths, internal links repointed to their /gr/ twin, canonical to the /gr/ URL,
hreflang alternates on both sides, and the en/gr toggle as real links.Coverage is not complete. Untranslated strings produce mixed-language pages, which
is worse than English-only for both UX and SEO. tools/untranslated-report.txt is the
running audit — regenerate it from a current build rather than trusting an old copy,
and check the wave checklist in the build plan (it lags behind the commits).
Owner review before anything Greek goes live — the owner's decision was to ship the Greek set all at once, after review.
Greek text lives in tools/translations.json, the generated /gr/ pages and parts of
the source. A mangled encoding destroys real user-facing text while the build still
passes.
Get-Content / Set-Content — Windows
PowerShell 5.1 reads as Windows-1252 and a round-trip double-encodes every Greek
character into του gibberish. Use the Edit tool, or Node with
readFileSync(f, "utf8") / writeFileSync(f, s, "utf8")./[Ͱ-Ͽ]/g)
rather than trusting a green build.Commit and push. That is all.
There is no database, no scripts/ directory and no backup script in this
project. node scripts/backup.mjs belongs to Joba and must never be run from here.
If a wrap up seems to call for a backup, the answer is no — the entire project is in
git, and git is the backup.
Sensible wrap up: run npm run build if the build could be affected, commit with a
clear message, push to origin main.
docs/greek-seo-build-plan.md — the /gr/ architecture and remaining waves.docs/restoni-editor-guide.md — the non-technical guide for property editors.docs/seo/keyword-map.md, docs/seo/blog-calendar.md — SEO planning.Update the relevant doc in the same commit as the work it describes.
Created 02/08/2026, after Joba's rules leaked into this project through a shared multi-root workspace. Extend it whenever a decision here is settled.