factcircuit
FactCircuit는 불변 출처와 단계별 검증, 제한된 검색, 재현 가능한 평가를 제공하는 감사 가능한 주장·증거 검증 루프입니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A browser-based tool for satellite imagery comparison — no server, no account, no install. Open it and it immediately shows you a live before/after slider over Phnom Penh using Esri satellite imagery alongside a CARTO reference map, so the interface is self-explanatory from the first second.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A browser-based tool for satellite imagery comparison — no server, no account, no install. Your photos and keys stay on your device.
Open it and you get a friendly start screen: add photos, capture from the map, open one of the bundled field sites, or continue your last project (autosaved on your device). Pick two photos by tapping their thumbnails and drag the divider to compare.README 전문 보기 ↗A browser-based tool for satellite imagery comparison — no server, no account, no install. Your photos and keys stay on your device.
Live at phnaekpkay.vercel.app
Open it and you get a friendly start screen: add photos, capture from the map, open one of the bundled field sites, or continue your last project (autosaved on your device). Pick two photos by tapping their thumbnails and drag the divider to compare.
Ctrl/Cmd+V)| View | What it does |
|---|---|
| All | Side-by-side grid in 2, 3 or 4 columns (1–2 on phones). |
| Compare | Draggable before/after divider (keyboard accessible). Drag or pinch each photo independently. Optional third photo. |
| Blend | Two photos blended with one slider; "Blink" auto-pulses for spotting subtle differences. |
| Play | Timelapse through every photo with smooth fades and a tappable timeline. |
| Changes | Highlights likely change and says how much of the area changed. One sensitivity slider, compare by colour, brightness or vegetation. |
The sidebar's Live satellite capture section lets you navigate a tile map and capture the current view as a frame. The same map is also embedded directly in the Slider view — you never need to open the sidebar just to change location.
| Provider | Key required | Dated imagery |
|---|---|---|
| Esri World Imagery | No | No — current mosaic |
| CARTO Voyager | No | No — reference map |
| NASA GIBS | No | Yes — VIIRS/MODIS near-real-time |
| Google Satellite | No (unofficial) | No — current mosaic |
| Mapbox Satellite | Free token | No — current mosaic |
| Sentinel Hub | Free config ID | Yes — dated 10 m Sentinel-2 |
For real before/after by date, use Sentinel Hub (free tier, ~10 m resolution). For a quick reference overlay, use Esri or CARTO. For historical imagery from Google Earth Pro, paste screenshots with Ctrl/Cmd+V.
MediaRecorder)The Field sites carousel (and menu entry) opens documented villages along the Cambodia–Thailand border. Each site is a small project.json plus WebP frames under public/assets/sites/<slug>/ (about 0.9 MB per site; the old 10 MB base64 JSON files were converted with tools/convert-sites.py). Share links look like /p/<lat>,<lng>.
npm install
npm run dev # Vite dev server
npm run lint # ESLint (also forbids innerHTML)
npm test # unit tests (Vitest)
npm run build # production build to dist/
npm run test:e2e # build, then Playwright on phone + desktop profiles
npm run serve:dist # serve dist/ with the headers from vercel.json
End-to-end tests run against tools/serve-dist.mjs, which applies the same headers and rewrites as vercel.json, so the enforced Content-Security-Policy is exercised. Locally, point Playwright at a browser with PW_CHROMIUM_PATH=/path/to/chrome; in CI run npx playwright install --with-deps chromium first.
index.html markup only (no inline script)
src/main.js app controller (being split into modules)
src/lib/ tested, DOM-light modules: dom, geo, format, project (validation),
change-detect, blob, secrets, store (IndexedDB), i18n, toast, share, install-help
src/components/ picker, start screen pieces
src/styles/ tokens → layout → components → stage
src/workers/ AI upscale worker (onnxruntime-web, self-hosted)
public/ static files: icons, splash images, field sites, sw.js, manifest
tools/ icon + splash generator, site converter, dist server
tests/ unit (Vitest) and e2e (Playwright)
iOS reads <link rel="apple-touch-icon"> (not the manifest) and needs an opaque, square PNG. tools/make-icons.mjs generates the whole set (120/152/167/180 px, root /apple-touch-icon.png, maskable/any PWA icons, favicon.ico, 12 launch screens) from one design; run python3 -I tools/optimize-splash.py afterwards. If the icon is still blank after deploying:
Enhance runs a local ONNX super-resolution model (Real-ESRGAN or SwinIR) in the browser through ONNX Runtime WebAssembly, self-hosted under /vendor/ort/ and only started when you load a model. Generated detail is for visual review only; originals remain the analytical source and enhanced photos are labelled.
public/models/RealESRGAN_x4plus.onnx is stored with Git LFS. For the hosted model to work on Vercel, enable Settings → Git → Git Large File Storage (LFS); otherwise the file served is a tiny pointer and loading fails (use the file picker instead).
See SECURITY.md for the model and for the keys that remain in git history and must be rotated.
MIT — see LICENSE.