尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A bilingual citizen archive of the trees still standing in Malé City — and a record of the ones that were cut down.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A public register of the trees still standing in Malé City, and a record of the ones that were cut down. Two things are tracked at once: what is still here, so there is something concrete to point at the next time a tree is threatened, and what is already gone, so the loss is countable rather than merely remembered.檢視完整 README ↗
A public register of the trees still standing in Malé City, and a record of the ones that were cut down.
Two things are tracked at once: what is still here, so there is something concrete to point at the next time a tree is threatened, and what is already gone, so the loss is countable rather than merely remembered.
Double-click index.html. That is the whole procedure. It works straight from the
file system, no local server required.
The only part that needs an internet connection is the map, which pulls tiles from OpenStreetMap. Offline, the map hides itself and the list takes over.
You do not need the command line for any of this.
male-trees is fine),
set it to Public, and create it.index.html, submit.html, about.html, and the
assets, data and photos folders. Commit.main branch and the / (root) folder, and click Save.https://YOUR-USERNAME.github.io/male-trees/.Every later change you make in the repository publishes itself within a minute.
The
.nojekyllfile in this folder matters. It stops GitHub trying to run the site through a blog engine. Keep it.
Out of the box the form works, but it has nowhere to send records: it hands the submitter a copyable summary and a pre-filled email to you instead. Nothing is lost, but it is manual.
To make submissions arrive automatically:
POST with a file attached.
Formspree, Getform, Web3Forms and Basin all do this. Check the current free tier
for photo uploads before committing to one, because these limits change and the
photo is the part that matters most here.assets/js/config.js and paste it in:submitEndpoint: "https://formspree.io/f/xxxxxxx",
contactEmail: "[email protected]",
That is the only change needed. Also set contactEmail either way, since it is the fallback
if the service is ever down.
The public form. https://kenaa.github.io/Trees-of-Maldives/submit.html. No account, no signup, works on a phone. This is the main route and the one to share publicly. See Turning submissions on above to give it an inbox.
GitHub issue forms. https://github.com/Kenaa/Trees-of-Maldives/issues/new/choose. Structured forms for people who already have a GitHub account. Three of them: a standing tree, a tree that was cut down, and a correction to an existing record. Photographs are dragged straight into the form and GitHub hosts them free.
The GitHub route costs nothing, never expires, and gives you moderation for free: each submission arrives as an issue you triage, with the contributor's name attached and a permanent audit trail. Its one limitation is that it needs a GitHub account, which is why the public form exists alongside it rather than being replaced by it.
Edit the forms in .github/ISSUE_TEMPLATE/. They are plain YAML, so adding a question means
adding a few lines.
data/species.js holds the species the forms offer. Most of it is drawn from
Selvam, V. (2007) Trees and shrubs of the Maldives, FAO RAP Publication
2007/12, whose introduction sets out the plant communities of the foreshore,
the beach crest and the inner island. Entries marked "source": "FAO 2007"
came from there and still need a Dhivehi name; see TRANSLATION.md.
The species menus in the GitHub issue forms are generated from this file. After editing it, run:
python3 tools/sync-forms.py
tools/validate.py fails the build if the two ever disagree, so the menus
cannot silently drift from the data.
python3 tools/validate.py
It reads data/trees.js, data/species.js and assets/js/i18n.js and reports anything
that would break the site: broken JSON with the line number, duplicate record ids, a
species that does not exist, coordinates outside Malé City, a lost block missing from a
felled tree, a photo file that is not there, missing alt text, or a translation key that
exists in one language but not the other.
The same check runs automatically on every push and pull request
(.github/workflows/validate.yml), so a stray comma cannot silently empty the live map.
Open data/trees.js. It is ordinary JSON with one line of wrapper at the top and a
semicolon at the bottom. Leave those two alone and edit everything between freely.
{
"id": "MLE-0017",
"status": "standing", // standing | lost | threatened | relocated
"verified": false, // true only after a site visit or a real source
"species": "ficus-benghalensis", // an id from data/species.js
"name": { "en": "Sultan Park banyan", "dv": "ރަސްރަނި ބަގީޗާ ނިކަ" },
"ward": "henveiru", // henveiru | galolhu | maafannu |
// machchangolhi | villimale | hulhumale
"place": { "en": "Rasrani Bageecha", "dv": "ރަސްރަނި ބަގީޗާ" },
"lat": 4.17570, "lng": 73.50900,
"girthCm": 340, "heightM": 14, "ageYears": 90, // null if unknown
"notes": { "en": "…", "dv": "…" },
"photos": [
{ "src": "photos/mle-0017.jpg",
"alt": { "en": "A wide banyan…", "dv": "…" },
"credit": "Photographer's name", "date": "2026-08-14" }
],
"recorded": "2026-09-03",
"lost": null, // see below
"sources": []
}
For a tree that is gone, set "status": "lost" and fill in the lost block:
"lost": {
"date": "2024-02", // YYYY-MM or YYYY-MM-DD; approximate is fine
"reason": "road-widening", // road-widening | construction | storm |
// disease | safety | relocated | unknown
"evidence": { "en": "Photograph from R. Ali, dated 2023-11.", "dv": "…" }
}
Check your work: save the file and reload index.html. If a record vanishes, you
have most likely dropped a comma or a closing brace.
Drop image files into photos/ and reference them as photos/filename.jpg. Resize
them to roughly 1600px on the long edge first. Full-size phone photos will make the
site slow on the mobile connections most people will use to read it.
Every photo needs an alt description. It is what a blind reader gets instead of the
image, and it is a WCAG requirement, not a nicety.
Every record currently in data/trees.js is an unverified placeholder. The
coordinates are approximate, the measurements are invented, and none of the removal
dates has been checked against a source. They exist so the site could be built and
tested against something realistic.
Delete them as real fieldwork replaces them. When the last one is gone, set
"seed": false in the meta block at the top of the file and the warning banner on the
home page disappears by itself.
All Dhivehi in this project is a first draft and needs a native-speaker review. See TRANSLATION.md; fixing a string means editing one line.
index.html The archive: map, filters, list, record detail
submit.html The public submission form
about.html Why the project exists, what the statuses mean, privacy
assets/css/style.css All styling. The palette is contrast-verified. Read the note
at the top before changing any colour.
assets/js/config.js The only file you need to edit for submissions
assets/js/i18n.js Every English and Dhivehi string
assets/js/app.js The archive page
assets/js/submit.js The form
data/trees.js The archive itself
data/species.js Species reference: scientific, English and Dhivehi names
photos/ Photographs