WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
ספרחוב은 이스라엘 및 전 세계 거리 도서관·책장·교환 페이지를 안내하는 무료 지도입니다
ספרחוב (ספר רחוב) היא מפה חינמית של ספריות רחוב, ארונות ספרים ומדפי החלפת ספרים בישראל ובעולם — ושל הספרים שנמצאים בהם עכשיו, וגם ספרים יד שנייה שקוראים מוכרים או מוסרים מהבית. מחפשים ספר? אולי הוא מח
라이프스타일GitHub @amih온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
POFOV — Pass On, Find Other Volumes. Crowd-sourced map of free street libraries and the books on their shelves (PWA).
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Runs at https://seferehov.com. Full feature list, hardware, capacity and plans: docs/FEATURES.md (PDF).
A shared map of free street libraries (book boxes, little free libraries, shelves in lobbies and parks) and the books on their shelves right now. Installable as an app on any phone (PWA).
qwen3-vl:8b-instruct), looks them up, and the user ticks/corrects the list before anything is saved.ol_books by deploy/ol-refresh.sh (systemd timer deploy/seferehov-ol-refresh.*, 5th of each month), so ISBN and title lookups are local. Web APIs (Open Library, Google Books with GOOGLE_BOOKS_API_KEY, National Library of Israel with NLI_API_KEY) are fallbacks.lookups (query, which source answered, match score) and every request to a source in lookup_calls (hit / miss / error / limited, HTTP status, retries, time). When a user confirms a shelf scan, each item is marked kept / edited / dropped, so you can see which source gives right answers. A source that reports its quota used up is skipped for an hour. Summaries: SELECT * FROM lookup_source_daily and SELECT * FROM lookup_match_quality.REVIEW_ALL_LOCATIONS=1 (default) every new library and change waits for a reviewer; admins get an email digest (NOTIFY_ADMIN_MINUTES)./l/<code>).amenity=public_bookcase from OpenStreetMap.| Web | Vite, vanilla JS, Leaflet + MapLibre vector map (OpenFreeMap, recoloured), Workbox service worker, ZXing WASM barcode reader. Hebrew (default, RTL) and English — strings in web/src/i18n.js |
| API | Node 22, Fastify 5, sharp (photos are re-encoded, which removes EXIF/GPS metadata) |
| DB | PostgreSQL 16 + PostGIS (Docker) |
cp .env.example .env # set ADMIN_EMAILS to your email
npm install
npm run db:up && npm run migrate
npm run seed:osm -- 29.4,34.2,33.4,35.9 # bbox south,west,north,east; omit for the whole world
npm run dev:server # API on :3870 (sign-in links are printed to this log without SMTP)
npm run dev:web # app on :5173
One home server runs everything: nginx, the API (systemd seferehov, port 3870), PostGIS in Docker, Ollama, and the monthly catalogue refresh (seferehov-ol-refresh.timer).
deploy/deploy.sh — refuses a dirty tree, builds, rsyncs to APP_DIR on the server (from gitignored deploy/target.private: SSH=user@host APP_DIR=/path), runs migrations, restarts seferehov.deploy/seferehov.service, deploy/seferehov-ocr.service (Surya OCR for Hebrew cover texts; venv steps in the file; also apt install hspell tesseract-ocr-heb for the Hebrew spelling fixes and the fallback) and deploy/seferehov-ol-refresh.{service,timer} to /etc/systemd/system/ (replace APP_USER/APP_DIR), and deploy/nginx.conf to /etc/nginx/sites-available/ (replace HOST, APP_DIR)..env: BASE_URL=https://seferehov.com, SMTP ([email protected]), Google sign-in, NLI_API_KEY, ADMIN_EMAILS. Google sign-in needs BASE_URL/api/auth/google/callback listed as a redirect URI in the Google Cloud console.No version numbers to bump. Each build:
injectManifest);version.json (<date>.<time>-<git sha>), which the API echoes as X-App-Version.The app checks for a new service worker on start, when it comes back to the foreground, hourly, and whenever the API reports a different version. The new worker installs in the background and is switched in at a safe moment: on the next screen change, or when the app is in the background, and never while uploads are queued. After the reload a toast shows the new version. For breaking API changes, set MIN_CLIENT_BUILD on the server: older clients get HTTP 426 and update immediately.
Server cache rules (see deploy/nginx.conf): /assets/* immutable for a year; index.html, sw.js, version.json, manifest.webmanifest always revalidated.
Code: AGPL-3.0-or-later. Library locations include OpenStreetMap data © OpenStreetMap contributors, ODbL.