尚未检测到更新。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.