尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A free directory for navigating health and advocacy services across Ireland and Northern Ireland — general health services, women's health, and neurodiversity/disability pathways, public and private, plus your rights (complaints, FOI, records).
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A free, installable directory for navigating health services and your rights across Ireland and Northern Ireland. Two layers:檢視完整 README ↗A free, installable directory for navigating health services and your rights across Ireland and Northern Ireland. Two layers:
#/prep) — an on-screen consultation checklist and a silent/off-site waiting-room check-in message, both built live from what you type and never saved anywhere. Purely a note-taking aid, not a stored health record.#/passport) and My call & referral log (#/log) — a one-page summary form and a running log of who-said-what, for the person to hand to (or quote to) a clinician themselves. Both are blank forms the app never suggests or auto-fills content into, both are ephemeral by default (nothing survives a refresh), and both only persist to this device's localStorage if the person explicitly ticks "Save on this device" on that page — unticking, or the "Clear" button, wipes the stored copy immediately. Plain storage, not encrypted: see the content-conventions note below on why.It's a static site — no build step, no backend, no database. Everything lives in data.js.
Any static file server works. From this folder:
python3 -m http.server 8000
Then open http://localhost:8000 in a browser.
pocket-guide).main branch:
git init
git add .
git commit -m "Initial pocket guide"
git branch -M main
git remote add origin https://github.com/YOUR-USERNAME/pocket-guide.git
git push -u origin main
https://YOUR-USERNAME.github.io/pocket-guide/. It updates automatically every time you push.Everything is in data.js. Each entry looks like this:
{
id: "unique-id", // no spaces, used in the URL
name: "Service name",
specialty: ["gynae"], // one or more ids from SPECIALTIES
county: ["cork-city"], // one or more ids from COUNTIES
blurb: "One sentence, shown in list view.",
details: ["Longer notes, one per bullet."],
referral: "How someone actually gets in — self-referral, GP, etc.",
contact: { phone: "...", email: "...", web: "...", address: "..." }
}
To add a new county (e.g. Kerry), add it to the COUNTIES array at the top of data.js, then tag entries with its id. To add a new specialty, do the same with SPECIALTIES.
There's no build step — save the file, refresh the browser, done.
These have built up over successive editing passes — keep following them:
#/prep, #/passport, #/log) only ever echoes back what the user typed — nothing is saved to storage, and the app never infers, suggests, autocompletes, or characterises (e.g. "this breaches standard X") anything about their care. #/passport and #/log are the two exceptions that can persist, and only because the user explicitly ticks "Save on this device" on that page — see their code comments in app.js (PASSPORT_SAVE_KEY / LOG_SAVE_KEY) before changing that behaviour. That storage is deliberately plain localStorage, not "encrypted" — an encryption key that has to live on the same device as the data it protects doesn't stop someone who has unlocked the device from reading it, so the actual safeguard is the opt-in and the plain-language warning on each page, not a crypto layer that would just be theatre. If a future feature wants to persist more personal content, or make either of these two on by default, treat that as a deliberate scope change needing its own privacy/threat-model pass (a shared device, a lost phone, someone else reading it), not a small addition.checked: "D Mon YYYY" is an optional per-entry verification-date stamp. Add it only to entries you've actually just re-verified against a live source — never backfilled or added speculatively.data.js without verifying it live first.This v1 was compiled from public HSE and voluntary-sector websites. Phone numbers, staff, and referral pathways change — every entry should be verified by phone before this is shared widely. Treat it as a strong first draft, not a finished, liability-safe product.
index.html — page shell, loads everything else
styles.css — all styling (design tokens at the top), self-hosted @font-face rules
app.js — hash-based router + rendering (no framework, no build step)
start.js — "Where do I start?" (`#/start`): the topic and location lookup table. Steps come from `doors.js`; `scripts/test-doors.js` checks every step resolves and that no Republic of Ireland page can appear in a Northern Ireland result
doors.js — the four hub pages (Find care, What applies to you, Take action, Get support) reached from Home: which hub lists each route. Edit this to move a feature; `node scripts/test-doors.js --table` prints the route table
data.js — all service listings, specialties, and counties — edit this to update content
manifest.json — PWA metadata (name, icons, colours). Optional install guidance lives at #/install (footer link)
sw.js — service worker, network-first with offline fallback
icons/ — app icons for home-screen install
assets/fonts/ — self-hosted Plus Jakarta Sans & Fraunces woff2 files, plus their OFL licences
vendor/leaflet/ — self-hosted Leaflet 1.9.4 (library only — map tiles are click-to-load, see below)
scripts/check-third-party.sh — fails the build if a new external request sneaks into HTML/CSS/JS
scripts/test-rep-letter.js — checks the "Write to your elected representative" wording is neutral and holds no contact detail (plain Node), plus page checks when Playwright is available (roles per region, nothing stored, no outside link)
scripts/test-feedback-link.js — checks the footer feedback link is exactly the expected Google Form (new tab, noopener, the wording about email and personal details) and that no other form link appears in any text file; plain Node
scripts/test-home.js — local pre-merge browser check of Home and search (order, emergency line, Where do I start? row and page, door tiles, search, no outside requests, 320px). Needs Playwright (`node scripts/test-home.js`); not run in CI, so run it before merging a change to Home, search or the tiles
scripts/test-doors.js — checks every route is assigned to a door (or to none), no route is under two doors, every "Where do I start?" step is a real route and none is Republic-of-Ireland-only for Northern Ireland, and the bottom tabs and cross-links are intact; plain Node
This site makes none on page load. Fonts (Plus Jakarta Sans, Fraunces) and the Leaflet map library are vendored into the repo and served from the same origin as everything else — see assets/fonts/ and vendor/leaflet/. The Content-Security-Policy in index.html only allows 'self' for scripts, styles, and fonts.
The one deliberate exception: the out-of-hours map (#/out-of-hours) starts as a static placeholder and only contacts OpenStreetMap's tile server once a visitor taps "Show map" — see the notice on that page. img-src in the CSP allows that one tile host for this reason. Run scripts/check-third-party.sh after any change that touches <script src>, <link href>, url(), @import, or fetch() — it fails on anything outside this list.
The service worker precaches the app shell, scripts, data files, icons and fonts on first load, and is network-first: it uses the network when it can and the saved copy when it can't. When the browser is offline, or a section fails to load, a banner says "You're offline. Showing what was last saved; some details may be out of date."
#/pregnancy and the sensitive: true rows store nothing, use a neutral route and tab title, and searches for terms in HHSearch.isSensitiveQuery are redirected there instead of being written into the address bar. scripts/test-pregnancy-privacy.js enforces it in CI. Browser history itself is outside the app's control.sw.js, installed for every visitor; it does not add files because of what someone viewed, and page views are hash routes that make no requests. Sensitive searches (HHSearch.isPrivateSearch) never appear in the address bar, tab title, results heading or screen-reader announcement. The browser's own history, autofill and any device backups are outside the app's control; private browsing is the reliable way to leave no trace. scripts/test-sensitive-privacy.js checks this in a real browser.sector: "private" is only for entries where the entity itself is a private company (e.g. Beacon Hospital, Mater Private, Blackrock Health, Bon Secours, Kingsbridge). Do not apply it to a public/HSE hospital or publicly-funded pathway just because it also accepts private patients or refers into private providers (e.g. a public maternity hospital's "private care" option, or an HSE-funded referral into a private fertility clinic) — accepting private patients is standard for public hospitals and isn't itself grounds for the tag.