{
  "ring-net": {
    "name": "RingNet",
    "nameParts": ["Ring", "Net"],
    "tagline": "earthquake_nowcast --unified --realtime",
    "summary": "ML earthquake prediction + multi-hazard alerts",
    "blurb": "A unified platform that predicts earthquakes using machine learning, monitors floods, heatwaves, and tsunamis, and delivers instant, localized alerts to keep communities safe.",
    "platforms": ["android"],
    "accent": "#b91c1c",
    "manTag": "RINGNET(1)",
    "icon": "logos/ring-net.png",
    "logo": "logos/ring-net-192.webp",
    "actions": [
      { "label": "▸ install from Play Store", "href": "https://play.google.com/store/apps/details?id=com.ranamahadahmer.ringnet" },
      { "label": "read docs", "href": "" }
    ],
    "features": [
      ["Seismic Nowcast", "ML-based short-window earthquake nowcasting for regions within 500 km."],
      ["Multi-Hazard Map", "Floods, heatwaves, tsunamis, every active hazard tracked on a single map."],
      ["Geo-Targeted Alerts", "FCM push notifications localized to your saved cities, with per-hazard cooldowns."],
      ["Offline Resilience", "Last-known hazard state cached for 72 hours so the app stays useful without signal."],
      ["Multi-Language", "Full UI in English and اردو, automatic locale detection."],
      ["Open Data Backbone", "Pulls from USGS, PMD, GDACS and NOAA, rate-limited and cached server-side."]
    ],
    "screenshots": [
      {
        "label": "android",
        "device": "phone",
        "items": [
          ["1.webp", "home"],
          ["2.webp", "hazard alert"],
          ["3.webp", "hazard map"],
          ["4.webp", "notifications"]
        ]
      }
    ],
    "stack": [
      ["client  ", "Kotlin • Jetpack Compose • MapLibre • Room"],
      ["ml      ", "TensorFlow Lite • ONNX • scikit-learn"],
      ["backend ", "FastAPI • Celery • PostgreSQL + PostGIS • Redis"],
      ["data    ", "USGS • PMD • NOAA DART • GDACS • IMD"],
      ["infra   ", "GCP • GKE • Cloud Pub/Sub • Cloud Run"],
      ["push    ", "Firebase Cloud Messaging • topic-based"]
    ],
    "faq": [
      ["q: can it actually predict earthquakes?", "a: no model is certain. RingNet outputs a *nowcast*, a probability\n   band for the next 72h based on seismicity patterns, stress signals,\n   and historical clustering. Treat it as guidance, never a guarantee."],
      ["q: is my location data shared?", "a: no. saved cities are stored device-local. push tokens route\n   through FCM and are bound to anonymous alert topics."],
      ["q: why android only?", "a: iOS in evaluation. the push-topic / background-sync story on\n   iOS needs a different architecture. eta q3 2026."],
      ["q: how are alerts throttled?", "a: per-city cooldown of 20min for seismic, 2h for heat/flood,\n   instant override for M>5.5 or tsunami warnings."]
    ],
    "footer": {
      "support": "support@ner-dev.com",
      "supportNote": "typical reply < 24h",
      "privacyUrl": "",
      "termsUrl": "",
      "homeUrl": "https://ner-dev.com",
      "playStoreUrl": "https://play.google.com/store/apps/details?id=com.ranamahadahmer.ringnet",
      "meta": "© 2026 ner-dev • Rana Mahad Ahmer",
      "metaNote": "built with tea • Islamabad, PK"
    },
    "seo": {
      "title": "RingNet - Real-Time Emergency Alert Platform",
      "updated": "2026-09-12",
      "description": "RingNet by Rana Mahad Ahmer (NER-DEV): machine-learning earthquake nowcasting plus flood, heatwave and tsunami alerts on Android. NUST SEECS final year project.",
      "ogImageAlt": "RingNet - real-time emergency alert platform by NER-DEV",
      "alternateName": "Ring-Net Emergency Alert Platform",
      "category": "UtilitiesApplication"
    }
  },
  "accfam": {
    "name": "AccFam",
    "nameParts": ["Acc", "Fam"],
    "tagline": "platform --unified --multi-tenant --no-silos",
    "summary": "Unified ERP, accounting, HR, mfg, inventory",
    "blurb": "AccFam unifies accounting, HR, manufacturing, inventory, sales, and procurement into one intelligent system, purpose-built for businesses that refuse to compromise. 30+ tightly-integrated modules sharing a single source of truth.",
    "platforms": ["web"],
    "accent": "#b8853a",
    "manTag": "ACCFAM(1)",
    "icon": "logos/accfam.png",
    "logo": "logos/accfam-192.webp",
    "actions": [
      { "label": "▸ visit accfam.uk", "href": "https://accfam.uk" },
      { "label": "explore modules", "href": "#modules" },
      { "label": "read docs", "href": "" }
    ],
    "features": [
      ["--blazing-fast", "Advanced caching delivers up to 2× faster page loads and report generation, even on massive datasets"],
      ["--secure-by-default", "Role-based access, audit trails on every transaction, automated backups, enterprise defaults"],
      ["--modern-ui", "Redesigned workspace • intuitive navigation • contextual quick actions • fully mobile-responsive"],
      ["--zero-silos", "Every module shares one database, accounting knows what manufacturing did, HR knows what projects need"],
      ["--customizable", "Custom fields, forms, workflows, print formats, multi-level approvals, no code required"],
      ["--scales", "From 10 to 10,000+ employees • start lean, expand as you grow"]
    ],
    "screenshots": [
      {
        "label": "web",
        "device": "desktop",
        "items": [
          "dashboard • live KPIs",
          "accounting • journal entries",
          "manufacturing • BOM tree",
          "inventory • multi-warehouse"
        ],
        "note": "browsers tested: chromium 120+ • firefox 119+ • safari 17+ • edge 120+ • mobile safari 16+"
      }
    ],
    "modules": [
      { "id": "MOD_01", "title": "ACCOUNTING & FINANCE", "desc": "Multi-currency ledgers, automated journals, P&L, Balance Sheet, cash flow, real-time." },
      { "id": "MOD_02", "title": "MANUFACTURING", "desc": "BOM, MRP planning, job cards, subcontracting, quality inspection end-to-end." },
      { "id": "MOD_03", "title": "INVENTORY & WAREHOUSE", "desc": "Multi-warehouse stock, batch traceability, barcode scanning, auto reorder levels." },
      { "id": "MOD_04", "title": "SALES & CRM", "desc": "360° pipeline, leads, quotations, orders, customer portal, sales analytics." },
      { "id": "MOD_05", "title": "PROCUREMENT", "desc": "Purchase requests to PO, supplier scorecards, landed cost, approval hierarchies." },
      { "id": "MOD_06", "title": "PROJECT MANAGEMENT", "desc": "Gantt charts, timesheets, budgets, profitability tracking, client portal." },
      { "id": "MOD_07", "title": "ASSET MANAGEMENT", "desc": "Full asset lifecycle, automated depreciation, maintenance scheduling." },
      { "id": "MOD_08", "title": "POINT OF SALE", "desc": "High-speed retail billing, offline mode, multi-counter, real-time sync." },
      { "id": "MOD_09", "title": "QUALITY MANAGEMENT", "desc": "Configurable inspections, non-conformance tracking, corrective action workflows." },
      { "id": "MOD_10", "title": "HELPDESK & SUPPORT", "desc": "SLA ticketing, knowledge base, maintenance scheduling, customer self-service." }
    ],
    "modulesNote": "and 20+ more, HR & payroll, education, healthcare, agriculture, non-profit, e-commerce, loans, and a fully extensible framework for your own.",
    "stack": [
      ["frontend", "React • Vite • Tailwind • TanStack Query"],
      ["backend ", "Python • Frappe Framework • gunicorn"],
      ["database", "MariaDB • Redis (cache + queue)"],
      ["queue   ", "RQ workers • scheduled jobs • webhooks"],
      ["search  ", "OpenSearch • per-doctype indexes"],
      ["infra   ", "Docker • Nginx • GCP • Cloud SQL • Terraform"]
    ],
    "faq": [
      ["q: which industries is AccFam built for?", "a: manufacturing, retail/POS, distribution, construction, healthcare,\n   education, finance, agriculture, EPC, professional services, real\n   estate, logistics. the data model is generic; the workflows specialize."],
      ["q: can it scale beyond a few hundred users?", "a: yes, read-replica routing, per-company sharding, and Redis-backed\n   workers handle 10k+ concurrent users. tested up to 4k rps sustained."],
      ["q: how do upgrades work?", "a: zero-downtime rolling upgrades via blue/green. data migrations run\n   in a read-write window with instant rollback if validation fails."],
      ["q: is there an on-prem option?", "a: yes, docker-compose for single-tenant deployments, helm chart for\n   k8s. license is per-instance, not per-user."]
    ],
    "footer": {
      "support": "support@ner-dev.com",
      "privacyUrl": "",
      "termsUrl": "",
      "homeUrl": "https://ner-dev.com",
      "meta": "© 2026 ner-dev • Rana Mahad Ahmer",
      "metaNote": "built with tea • Islamabad, PK"
    },
    "seo": {
      "title": "AccFam - ERP and Enterprise Business Platform",
      "updated": "2026-09-12",
      "description": "AccFam by NER-DEV (Rana Mahad Ahmer): enterprise resource planning that unifies accounting, HR, manufacturing, inventory, sales and procurement on one platform.",
      "ogImageAlt": "AccFam - enterprise business platform by NER-DEV",
      "alternateName": "AccFam Enterprise Platform",
      "category": "BusinessApplication"
    }
  },
  "accfam-work": {
    "name": "Accfam Work",
    "nameParts": ["Accfam ", "Work"],
    "tagline": "attendance --rosters --tasks --chat --calls --assistant --native-apps --atomic-permissions",
    "summary": "GPS field attendance, web + native apps, multi-tenant",
    "blurb": "A workforce platform for companies whose people work at client sites — GPS-verified punches, roster-aware lateness rules, tasks and projects, team chat and calls, and an assistant that answers from the company's own documents — on the web and in native apps for Android, iPhone, Windows and Mac built from one Kotlin Multiplatform codebase, with a permission matrix where every action is granted one at a time.",
    "platforms": [
      "web",
      "android",
      "ios",
      "windows",
      "macos"
    ],
    "accent": "#0f7a54",
    "manTag": "ACCFAM-WORK(1)",
    "icon": "logos/accfam-work.png",
    "logo": "logos/accfam-work-192.webp",
    "actions": [
      { "label": "▸ visit work.accfam.uk", "href": "https://work.accfam.uk" },
      { "label": "▸ get it on Google Play", "href": "https://play.google.com/store/apps/details?id=com.ner_dev.accfam_work" },
      { "label": "explore modules", "href": "#modules" },
      { "label": "read docs", "href": "" }
    ],
    "features": [
      ["--gps-verified", "Every punch carries one GPS fix measured against the site's geofence; an outside-radius punch is flagged for review or refused, per the company's chosen mode. Nothing is recorded between punches."],
      ["--offline-first", "Punches and messages made without signal are held on the device by the apps and sent when the connection returns; the web stays an installable PWA with a service worker and the same durable submit queue."],
      ["--native-apps", "One Kotlin Multiplatform codebase with a shared Compose Multiplatform UI ships the Android, iOS, Windows and macOS apps. They call the same API as the web, so permissions and every rule stay on the server, and a parity check keeps web and apps from drifting apart."],
      ["--attested-punches", "Every app punch proves where it came from — Google Play Integrity on Android, Apple App Attest on iPhone, and on a computer an Ed25519 key registered on first run that signs each punch over its body, the time and a one-time nonce."],
      ["--device-bound", "Each employee is bound to one phone; a punch from any other device is refused until an admin approves the change, which is what stops one person punching for another."],
      ["--spoof-aware", "Heuristics catch faked locations — a too-perfect accuracy figure, coordinates identical to the last punch, a device clock far from real time, travel faster than is physically possible, or GPS that disagrees with the network's own position."],
      ["--roster-aware", "Lateness, early-leave, half-day and absence are judged against each team-or-site's own schedule and time zone — its custom hours when set, the company default otherwise."],
      ["--site-clocks", "A site keeps its own time zone, so a team in Karachi working a New York client's day is judged in New York time, and hours like 18:00 to 03:00 are a night shift into the next morning."],
      ["--atomic-permissions", "Every feature splits into single actions, and each action about somebody's records exists four times over — own, juniors', peers', seniors' — crossed with reach across one's teams or the whole company. Nothing is visible until it is granted, and only the platform owner can hand out the permission that edits permissions."],
      ["--client-policy", "A company decides, per person, where they may sign in — web, Windows, Mac, Android or iPhone — checked by the server on every request."],
      ["--team-chat", "Direct messages, groups, channels scoped to a team or site, moderator-only announcement rooms, files and voice notes with waveforms, mentions, read receipts, an edit window, moderation that cannot read rooms it is not in, and exports written to the audit log."],
      ["--calls", "WebRTC voice calls and screen sharing — browser-to-browser mesh up to four, bigger rooms on the company's own Cloudflare SFU/TURN or LiveKit keys. Calls ring a locked phone and survive app switches."],
      ["--ai-assistant", "An assistant that answers from the company's own handbooks and policies, held to the subjects it was given, with its own name, face and tone — OpenAI, Anthropic or Gemini behind one provider interface, every request logged."],
      ["--tasks-projects", "Tasks with comments, a submit-then-review step, recurring series and a chat thread of their own; projects that group them and archive when finished; assignment bounded by rank; a self-raised task can be made private to its owner."],
      ["--report-exports", "Eight report types render to XLSX, PDF and CSV from a single table builder, so the on-screen preview and the downloaded file can never disagree — and no report shows more than the reader's permissions allow."],
      ["--multi-tenant", "Each company's data is walled off by server-side scoping; a super-admin creates companies, switches add-ons on, sets caps and retention, and enters a scoped support view without mixing one client's records with another's."],
      ["--self-updating-desktop", "The Windows (MSI) and Mac (DMG) apps find a new release, download it with resume, verify its size and SHA-256, and swap themselves in place. A minimum version per app turns older builds away with HTTP 426 until they update."],
      ["--one-retention-dial", "One retention period per company: attendance, shifts, messages, media, notifications and assistant logs older than it are purged nightly, while deleting a person anonymises their work history instead of shredding the record."]
    ],
    "screenshots": [
      {
        "label": "desktop • admin",
        "device": "desktop",
        "items": [
          ["https://www.youtube-nocookie.com/embed/1VDK2iTKq0o", "demo"],
          ["desktop-01-overview.webp", "overview"],
          ["desktop-02-review.webp", "attendance review"],
          ["desktop-03-roster.webp", "roster"],
          ["desktop-04-tasks.webp", "tasks"],
          ["desktop-05-reports.webp", "reports"]
        ],
        "note": "browsers tested: chromium 120+ • firefox 119+ • safari 17+ • edge 120+ • mobile safari 16+"
      },
      {
        "label": "phone",
        "device": "phone",
        "items": [
          ["phone-01-check-in.webp", "check in"],
          ["phone-02-on-site.webp", "on site"],
          ["phone-03-roster.webp", "my roster"],
          ["phone-04-tasks.webp", "my tasks"],
          ["phone-05-requests.webp", "requests"],
          ["phone-06-chat.webp", "chat"],
          ["phone-07-notifications.webp", "notifications"],
          ["phone-08-dark.webp", "dark theme"]
        ]
      },
      {
        "label": "tablet",
        "device": "tablet",
        "items": [
          ["tablet-01-punch.webp", "punch"],
          ["tablet-02-roster.webp", "my roster"],
          ["tablet-03-tasks.webp", "my tasks"],
          ["tablet-04-requests.webp", "requests"],
          ["tablet-05-chat.webp", "chat"]
        ]
      }
    ],
    "modules": [
      { "id": "MOD_01", "title": "CHECK-IN / CHECK-OUT", "desc": "GPS punch against the site geofence, offline queue with replay, one-device binding, spoof heuristics, compulsory check-out notes, automatic half-day detection." },
      { "id": "MOD_02", "title": "ROSTER & SHIFTS", "desc": "Range-based generation from team → site, assign a whole team (or a chosen subset) to a site, copy last week, clear a client-closed day, draft then publish, reminders before a shift starts." },
      { "id": "MOD_03", "title": "ATTENDANCE REVIEW", "desc": "Approve, reject, correct or reject-as-absence; half-day and lateness overrides; admin check-out of a forgotten punch; both GPS pins on a map with the full timeline." },
      { "id": "MOD_04", "title": "REQUESTS", "desc": "Leave, half days, late arrivals and early finishes; balances shown before and after; approved days suppress the nightly absence and block a same-day punch." },
      { "id": "MOD_05", "title": "TASKS & PROJECTS", "desc": "Tasks with assignees, comments, history and a submit-then-review step; recurring series; projects that group related work and archive when finished; ranked assignment; private self-raised tasks; a chat thread per task." },
      { "id": "MOD_06", "title": "TEAM CHAT", "desc": "DMs, group chats, team- and site-scoped channels that enrol everyone assigned, moderator-only announcement rooms, up to ten attachments a message, voice notes with waveform and range-streamed playback, mentions, pins, read receipts, an edit window and audited exports." },
      { "id": "MOD_07", "title": "AI ASSISTANT", "desc": "Company documents ingested from PDF and DOCX and retrieved per question; answers confined to the subjects it was given; identity, greeting and tone per company; voice and image input; per-request activity log and monthly usage; provider and key held by the platform owner." },
      { "id": "MOD_08", "title": "PERMISSIONS & ROLES", "desc": "A matrix of feature.action permissions with four rank columns, custom roles built from admin / manager / employee templates, reach across one's own teams or the whole company, deny-by-default visibility, and a role-manager permission only the platform owner can grant." },
      { "id": "MOD_09", "title": "REPORTS & EXPORTS", "desc": "Timesheet, location log, attendance summary, site-visit log, billable hours, exception report, task log and task summary — one builder, rendered to XLSX, PDF or CSV." },
      { "id": "MOD_10", "title": "SITES & GEOFENCES", "desc": "Client sites with lat/lng and a radius drawn on a map, per-site custom hours, working days and time zone, address geocoding, allowed-team assignment." },
      { "id": "MOD_11", "title": "TEAMS & EMPLOYEES", "desc": "Teams with multi-site assignment and their own overrides of the company's rules, employees who can sit on several teams, bulk import, per-employee device binding and unbind." },
      { "id": "MOD_12", "title": "DASHBOARD & AUDIT", "desc": "Live on-site board, present / late / absent / flagged tiles with day-over-day deltas, a seven-day chart, and an append-only audit log with detail views." },
      { "id": "MOD_13", "title": "SETTINGS & RULES", "desc": "Geofence mode, grace period, absent cut-off, half-day and full-day thresholds, overtime, auto-close, working days, holidays, chat and assistant switches, shift reminders, quiet hours, and one retention period." },
      { "id": "MOD_14", "title": "COMPANY DRIVE", "desc": "Every file the company holds — chat attachments, voice notes, avatars — with storage totals, separate read and delete permissions, and audited access to files from conversations an admin is not part of." },
      { "id": "MOD_15", "title": "PLATFORM / MULTI-TENANT", "desc": "Super-admin company estate — create companies, switch add-ons on, set per-company caps and retention, configure each assistant, review its usage, and enter a scoped support view." },
      { "id": "MOD_16", "title": "CALLS & SCREEN SHARING", "desc": "Voice calls and screen sharing from any chat; browser-to-browser mesh up to four, bigger rooms on the company's own Cloudflare SFU/TURN or LiveKit keys; ringing on a locked phone; calls that survive switching apps." },
      { "id": "MOD_17", "title": "NATIVE APPS", "desc": "Android, iPhone, Windows and Mac from one Kotlin Multiplatform codebase on the web API; attested punches, offline queue for punches and messages, push, in-app updates on Android, self-updating MSI and DMG, and a per-person rule for where each employee may sign in." }
    ],
    "modulesNote": "Also: device-change approvals, push and email notifications with quiet hours, eighteen light and dark palettes a company picks its look from, and one nightly job that auto-closes, marks absent, purges past retention and sends the digest.",
    "stack": [
      ["frontend", "Vite 7 • React 19 • TypeScript 5.8 • Tailwind v4 • Radix UI • react-router 6 • lucide • zod • installable PWA with a service worker and an offline punch queue"],
      ["backend ", "Express 4 on Node 20 • pure-domain core in its own workspace • Kysely • zod • ExcelJS + @react-pdf/renderer for report rendering • node-cron for the nightly job • server-sent events for live updates"],
      ["database", "PostgreSQL • SQL migrations applied at container start • generated types • PGlite for the database test suite"],
      ["auth    ", "Firebase Auth (email/password) • httpOnly session cookie • App Check + reCAPTCHA Enterprise • atomic permissions and ranked visibility held in Postgres, not in claims"],
      ["ai      ", "OpenAI / Anthropic / Google Gemini behind one provider interface • company documents ingested with pdf.js and mammoth • retrieval confined to configured subjects • every request logged"],
      ["maps    ", "Google Maps JavaScript API (geofence draw + pins) • Leaflet for the lighter map views • OpenStreetMap Nominatim for address geocoding"],
      ["media   ", "Chat files, voice notes and avatars on a server volume • sharp for image processing • HTTP range requests, so a voice note starts playing before it has finished downloading"],
      ["infra   ", "One Docker image running as either half — Express API or nginx serving the SPA • Contabo VPS in Germany • Cloudflare tunnel • Redis for rate limits and presence • Resend for transactional email • Firebase Cloud Messaging for push"],
      ["apps    ", "Kotlin 2.4 • Compose Multiplatform 1.12 • Ktor 3.6 client • webrtc-kmp on mobile, webrtc-java on desktop • Firebase Messaging, Crashlytics and App Check (Play Integrity, App Attest) • Google Play in-app updates • jpackage MSI and DMG"],
      ["calls   ", "WebRTC mesh • Cloudflare Calls (SFU + TURN) • LiveKit"],
      ["ci      ", "GitHub Actions — one Installers workflow builds the MSI, the DMG, the signed Play bundle and the iOS archive at one version"]
    ],
    "faq": [
      ["q: how does it stop one worker punching in for another?", "a: three layers — each employee is bound to one phone (a new\n   device needs admin approval), every punch is geofenced to the\n   site, and spoof heuristics flag faked GPS, a wrong device clock\n   or travel too fast to be real."],
      ["q: what happens when a field worker has no signal?", "a: the apps keep punches and messages on the device and send\n   them when the connection returns. on the web it's a PWA:\n   the punch is queued by a service worker and replayed, so the\n   queue survives a closed tab or a dead network."],
      ["q: which devices?", "a: the web, plus native apps for android, iphone, windows and\n   mac — one kotlin multiplatform codebase for all four apps,\n   on the same api as the web. android is on google play."],
      ["q: can a manager read a private conversation?", "a: no. a room is readable by its members and nobody else,\n   whatever rank somebody holds. moderators can delete a message\n   they can already see, and every conversation export is written\n   to the audit log."],
      ["q: does the assistant train on our documents?", "a: no. a question retrieves passages from the company's own\n   documents and sends them to the model provider for that one\n   answer. it stays inside the subjects it was given, declines the\n   rest, and every request is logged."],
      ["q: how fine-grained are permissions, really?", "a: every feature is split into single actions, and each action\n   about somebody's records exists four times — own, juniors',\n   peers', seniors' — narrowed again to one's own teams or the\n   whole company. nothing shows until it is granted, and only the\n   platform owner can grant the permission that edits permissions."],
      ["q: is it multi-company?", "a: yes — fully multi-tenant. one company can never see another's\n   data; a super-admin creates companies, switches add-ons like\n   chat and the assistant on, and sets per-company caps and\n   retention."],
      ["q: where does it run?", "a: one docker image on a contabo vps in germany behind a\n   cloudflare tunnel — nginx serves the spa, express serves the\n   api, postgres holds the data, files sit on a server volume and\n   redis covers rate limits and presence."],
      ["q: how are the numbers kept honest for payroll?", "a: a day is counted once regardless of how many site visits it\n   holds, hours sum across visits, half/full is threshold-driven,\n   and every admin override is written to an append-only audit log."]
    ],
    "footer": {
      "support": "support@ner-dev.com",
      "privacyUrl": "https://work.accfam.uk/privacy",
      "termsUrl": "https://work.accfam.uk/terms",
      "homeUrl": "https://ner-dev.com",
      "meta": "© 2026 ner-dev • Rana Mahad Ahmer",
      "metaNote": "built with tea • Islamabad, PK",
      "playStoreUrl": "https://play.google.com/store/apps/details?id=com.ner_dev.accfam_work"
    },
    "seo": {
      "title": "Accfam Work - GPS Field Attendance Platform",
      "updated": "2026-10-02",
      "description": "Accfam Work by NER-DEV: GPS-verified field attendance with rosters, tasks, team chat and calls, on the web and native apps for Android, iPhone, Windows and Mac.",
      "ogImageAlt": "Accfam Work - attendance, rosters, tasks and chat for field teams",
      "customOg": true,
      "alternateName": "Accfam Work Attendance",
      "category": "BusinessApplication"
    }
  },
  "lms": {
    "name": "LMS",
    "nameParts": ["", "LMS"],
    "tagline": "assessment --paper-first --ai-marked --teacher-released",
    "summary": "Paper tests, AI-read and teacher-released",
    "blurb": "LMS is a multi-tenant school platform built around tests on paper. Teachers print personalised answer booklets, scan them with a phone or a copier, and a vision model reads the handwriting and suggests marks against the mark scheme. Teachers review and release every result, and see where each class needs help.",
    "platforms": [
      "web"
    ],
    "accent": "#1f7a73",
    "manTag": "LMS(1)",
    "icon": "logos/lms.png",
    "logo": "logos/lms-192.webp",
    "actions": [
      { "label": "▸ visit lms.accfam.uk", "href": "https://lms.accfam.uk" },
      { "label": "explore modules", "href": "#modules" },
      { "label": "read docs", "href": "" }
    ],
    "features": [
      ["--paper-first", "Personalised answer booklets with a QR code and four ArUco markers per page, so any photo or copier scan lands on the right student and page"],
      ["--teacher-in-control", "AI suggests, teachers decide: nothing AI-marked reaches a student or parent until a teacher releases it, and every AI decision records its model and prompt version"],
      ["--marked-by-code", "Multiple choice, true or false and numeric answers are marked by code, never by a model, and totals are always added up by code"],
      ["--no-names-to-ai", "Answer crops leave out the header band and text is checked for names, emails and phone numbers before any AI call"],
      ["--bring-your-own-key", "Each school runs on its own AI account and key (Anthropic, Google, OpenAI or compatible), encrypted at rest, with a monthly spending cap"],
      ["--multi-tenant", "Every school's data sits behind PostgreSQL row level security; one school can never read another's, tested on every route"]
    ],
    "screenshots": [
      {
        "label": "web • staff",
        "device": "desktop",
        "items": [
          ["1.webp", "school admin • setup dashboard"],
          ["2.webp", "question bank • structured question"],
          ["3.webp", "print centre • answer booklets"],
          ["4.webp", "scanning • page matching"],
          ["5.webp", "marking • overview"],
          ["6.webp", "review • AI-suggested mark"],
          ["7.webp", "release • results"],
          ["8.webp", "insights • topic heatmap"],
          ["9.webp", "platform • a school's own AI keys"],
          ["10.webp", "student • scanned script"]
        ],
        "note": "eight themes, four light and four dark • every screen at phone, tablet and desktop widths"
      },
      {
        "label": "mobile • students & parents",
        "device": "phone",
        "items": [
          ["11.webp", "parent • home"],
          ["12.webp", "student • result"],
          ["13.webp", "teacher • scanning"],
          ["14.webp", "teacher • review"]
        ]
      }
    ],
    "modules": [
      { "id": "MOD_01", "title": "QUESTION BANK & AI GENERATION", "desc": "Questions per topic with mark schemes, review and approval, and AI drafts checked blind before a teacher sees them." },
      { "id": "MOD_02", "title": "PRINT CENTRE", "desc": "Personal booklets per student, A4 or Letter, built as PDFs by headless Chromium with bundled fonts." },
      { "id": "MOD_03", "title": "SCANNING", "desc": "Phone photos, copier PDFs and HEIC; markers align each page, QR codes match it, blurry pages go to retakes." },
      { "id": "MOD_04", "title": "AI MARKING & REVIEW", "desc": "Handwriting transcribed, written answers marked against the scheme, low confidence and near-boundary answers routed to a teacher." },
      { "id": "MOD_05", "title": "RELEASE & GRADEBOOK", "desc": "Release per class with checks, partial release for held answers, results, grade entries and notices to families." },
      { "id": "MOD_06", "title": "STUDENT & PARENT PORTALS", "desc": "Released results with feedback and scripts, mark queries, and one parent account for every child." },
      { "id": "MOD_07", "title": "ATTENDANCE & TIMETABLE", "desc": "Daily or per period registers with absence emails, and timetables imported from a spreadsheet." },
      { "id": "MOD_08", "title": "REPORT CARDS", "desc": "Term cards from marks and comments, approved by coordinators and heads, published as PDFs." },
      { "id": "MOD_09", "title": "INSIGHTS", "desc": "Topic heatmaps per class, attention flags, item analysis and AI narratives a teacher approves." },
      { "id": "MOD_10", "title": "PLATFORM ADMIN", "desc": "Schools, plans and add-ons, each school's AI keys and cap, usage and cost, health, audit and time-limited support access." }
    ],
    "modulesNote": "and more, online quizzes, announcements, materials, notifications, per-school terminology, eight themes, nightly backups with tested restore.",
    "stack": [
      ["frontend", "React 19 • Vite • Tailwind 4 • shadcn/ui • TanStack Query + Table"],
      ["backend ", "Node.js 22 • Express 5 • Drizzle • zod • TypeScript strict"],
      ["database", "PostgreSQL 17 • row level security • pgvector • ltree"],
      ["queue   ", "BullMQ • Redis 7 • idempotent jobs • sweeper"],
      ["scanner ", "Python • FastAPI • OpenCV ArUco • zxing-cpp • pypdfium2"],
      ["pdf     ", "headless Chromium via playwright-core • bundled fonts"],
      ["infra   ", "one Docker image, four roles • Compose • Cloudflare Tunnel • GitHub Actions"]
    ],
    "faq": [
      ["q: do students need devices?", "a: no. students write on printed booklets; staff scan them with a\n   phone or a copier. online quizzes are there for schools that want them."],
      ["q: does the AI give the final mark?", "a: never on its own. objective parts are marked by code, the AI only\n   suggests marks for written answers, and a teacher releases every result."],
      ["q: which AI does it use?", "a: the school's own. each school adds its own key for Anthropic,\n   Google, OpenAI or a compatible service, and pays its provider directly."],
      ["q: is student data sent to the AI?", "a: no names, roll numbers or contact details. the name band is cut\n   from every crop and text is checked before any call."]
    ],
    "footer": {
      "support": "support@ner-dev.com",
      "privacyUrl": "https://lms.accfam.uk/privacy",
      "termsUrl": "https://lms.accfam.uk/terms",
      "homeUrl": "https://ner-dev.com",
      "meta": "© 2026 ner-dev • Rana Mahad Ahmer",
      "metaNote": "built with tea • Islamabad, PK"
    },
    "seo": {
      "title": "LMS - Paper-First School Assessment Platform",
      "updated": "2026-10-17",
      "description": "LMS by NER-DEV: school assessment where tests stay on paper. Print booklets, scan them, AI reads handwriting and suggests marks, and teachers release results.",
      "ogImageAlt": "LMS - paper-first school assessment platform by NER-DEV",
      "alternateName": "LMS School Assessment Platform",
      "category": "EducationalApplication"
    }
  },
  "i-sahulat": {
    "name": "iSahulat",
    "nameParts": ["i", "Sahulat"],
    "tagline": "saas --manufacturing --multi-tenant --layered-cogs",
    "summary": "Invoicing + FBR sales-tax integration",
    "blurb": "iSahulat is a full-stack SaaS for Pakistani manufacturing SMEs, sales, inventory, manufacturing batches, banking, expenses, and a real layered cost-of-sale model rolled into one multi-tenant platform.",
    "platforms": ["web"],
    "accent": "#5eead4",
    "manTag": "ISAHULAT(1)",
    "icon": "logos/i-sahulat.png",
    "logo": "logos/i-sahulat-192.webp",
    "actions": [
      { "label": "▸ visit i-sahulat.com", "href": "https://i-sahulat.com" },
      { "label": "explore modules", "href": "#modules" },
      { "label": "read docs", "href": "" }
    ],
    "features": [
      ["--multi-tenant", "Each client company's data is fully walled off, one company can never see another's records, even on shared infrastructure"],
      ["--layered-cogs", "Real cost-of-sale per unit sold (FIFO or Weighted Average), every stock-in records its unit cost, every stock-out pops the layer queue"],
      ["--secure-by-default", "JWT rotation, CSRF protection, rate-limit + lockout, XSS input sanitisation, prod refuses to start without strong signing keys"],
      ["--csv-everywhere", "Customers, products, invoices, orders, receipts, expenses, bank transactions, all importable from spreadsheets with multi-row line items"],
      ["--mobile-responsive", "Sidebar collapses to a hamburger drawer • forms stack vertically • tables scroll sideways instead of squishing columns"],
      ["--scheduler-ready", "Five nightly jobs run on their own, overdue marking, recurring invoices, recurring expenses, trial expiry, token cleanup"]
    ],
    "screenshots": [
      {
        "label": "web",
        "device": "desktop",
        "items": [
          ["1.webp", "dashboard • top"],
          ["2.webp", "dashboard • bottom"],
          ["3.webp", "sales • invoices"],
          ["4.webp", "sales • customers"],
          ["5.webp", "inventory • products"],
          ["6.webp", "inventory • patches"],
          ["7.webp", "inventory • adjustments"],
          ["8.webp", "expenses • categories"],
          ["9.webp", "reports • sales"],
          ["10.webp", "reports • inventory"],
          ["11.webp", "reports • financial • top"],
          ["12.webp", "reports • financial • bottom"],
          ["13.webp", "reports • tax"],
          ["14.webp", "user management"]
        ],
        "note": "browsers tested: chromium 120+ • firefox 119+ • safari 17+ • edge 120+ • mobile safari 16+"
      }
    ],
    "modules": [
      { "id": "MOD_01", "title": "SALES & RECEIVABLES", "desc": "Invoices, orders, receipts, credit notes, recurring billing, multi-invoice payment allocation, post-dated cheques." },
      { "id": "MOD_02", "title": "EXPENSES & PAYABLES", "desc": "Vendors with statements, hierarchical categories, multi-instalment payments, recurring bills, PDF vouchers." },
      { "id": "MOD_03", "title": "INVENTORY & PRODUCTS", "desc": "Variants, serial numbers, movement history, image upload, barcode/QR generation, bulk price update." },
      { "id": "MOD_04", "title": "MANUFACTURING", "desc": "Batches with BOM, production stages, yield + waste tracking, status workflow, stock reversal on delete." },
      { "id": "MOD_05", "title": "COST OF SALE (COGS)", "desc": "Layered cost queue per product, FIFO + Weighted Average, fallback flagging, forced re-valuation, inventory adjustments." },
      { "id": "MOD_06", "title": "BANKING", "desc": "Multi-account, running balance, single + bulk reconciliation, CSV import, expense-payment auto-debit." },
      { "id": "MOD_07", "title": "CUSTOMERS & CRM", "desc": "B2B contacts, communication log, credit-limit enforcement, duplicate detection, printable statement." },
      { "id": "MOD_08", "title": "REPORTS", "desc": "Sales, Inventory (layer-based), Financial (P&L + opex), Tax (GST/WHT/net liability), Expenses, COGS, all PDF exportable." },
      { "id": "MOD_09", "title": "ADMIN PANEL", "desc": "Multi-company management, subscription plans, trial toggle, platform metrics, cross-company audit log, JSON backup." },
      { "id": "MOD_10", "title": "SECURITY", "desc": "Short-lived JWT + refresh rotation, bcrypt, CSRF, rate limiting, account lockout, full tenant isolation, role-based perms." }
    ],
    "modulesNote": "and more, recurring background jobs, one-click company-wide JSON backup, custom invoice templates with company logo, mobile-responsive across every screen.",
    "stack": [
      ["frontend", "React 19 • Vite 8 • Tailwind 4 • React Router 7 • TanStack Query 5"],
      ["backend ", "Node.js • Express 5 • Knex 3 • ES modules"],
      ["database", "PostgreSQL • Neon (serverless)"],
      ["email   ", "Nodemailer • SMTP2GO (mail.smtp2go.com:2525)"],
      ["pdf     ", "PDFKit • per-company templates + accent colours"],
      ["jobs    ", "node-cron (self-hosted) • Vercel Cron (production)"],
      ["infra   ", "Vercel • single project • serverless • GitHub branches → environments"]
    ],
    "faq": [
      ["q: which industries is iSahulat built for?", "a: manufacturing-first, BOMs, production batches, real cost-of-sale.\n   also fits distribution, retail, and trading SMEs out of the box. the\n   data model is generic; manufacturing-specific workflows light up\n   when they're needed."],
      ["q: how does multi-tenancy work?", "a: shared schema with company_id on every tenant table plus a\n   tenantContext middleware that scopes every query. one platform-\n   level super-admin can move between companies; nobody else can."],
      ["q: how accurate is the gross-profit number?", "a: it's accurate to the rupee once you start booking purchase\n   expenses against products and completing manufacturing batches. each\n   stock-in records its real unit cost; each sale pops the layer queue.\n   the COGS report shows you what fraction of period cost-of-sales came\n   from the cost-price fallback so you can see when accuracy improves."],
      ["q: can it self-host?", "a: yes, single Express app + PostgreSQL • 32 migrations • the\n   scheduler runs on node-cron in self-hosted environments and on\n   Vercel Cron in production. self-host is one container plus a\n   managed Postgres (Neon, RDS, or any other)."]
    ],
    "footer": {
      "support": "support@ner-dev.com",
      "privacyUrl": "",
      "termsUrl": "",
      "homeUrl": "https://ner-dev.com",
      "meta": "© 2026 ner-dev • Rana Mahad Ahmer",
      "metaNote": "built with tea • Islamabad, PK"
    },
    "seo": {
      "name": "i-Sahulat",
      "title": "i-Sahulat - Business Management for Manufacturers",
      "updated": "2026-09-12",
      "description": "i-Sahulat by NER-DEV (Rana Mahad Ahmer): multi-tenant SaaS for Pakistani manufacturing SMEs covering sales, inventory, batches, banking, expenses and costing.",
      "ogImageAlt": "i-Sahulat - business management platform by NER-DEV",
      "alternateName": "i-Sahulat Business Management Platform",
      "category": "BusinessApplication"
    }
  }
}
