{
  "name": "Bento Labs",
  "url": "https://bentolabs.co.uk/",
  "description": "Custom software design, development and ongoing support for hospitality, property and regulated businesses.",
  "parent": {
    "name": "Forthreason AI",
    "url": "https://forthreason.com/"
  },
  "contact": "contact@bentolabs.co.uk",
  "projects": [
    {
      "id": "pos",
      "name": "BentoPOS",
      "sector": "Hospitality",
      "status": "In daily use",
      "title": "Built for the busiest part of the day.",
      "desc": "Orders, kitchen tickets and the details that keep a takeaway moving. Software shaped around the people using it on shift.",
      "problem": "A busy service cannot wait while staff stitch together screens, paper tickets and phone calls.",
      "built": "A custom point-of-sale system with bilingual menu management, caller identification, kitchen printing and operational reporting.",
      "proof": "Used in a working takeaway, with continued maintenance including clearer menu names and caller-ID recovery work in September 2026.",
      "tech": [
        "TypeScript",
        "React",
        "SQLite",
        "Thermal printing"
      ],
      "next": "A till, booking flow or internal system built around the way your team actually works.",
      "asset": "assets/pos-menu.webp",
      "caption": "BentoPOS owner console. Existing product screenshot.",
      "chapters": [
        {
          "label": "Build the order",
          "title": "The details belong to the dish.",
          "copy": "Staff choose collection or delivery, add dishes and attach changes to the correct line. This example follows a card-at-counter order.",
          "signal": "ORDER / COLLECTION"
        },
        {
          "label": "Confirm payment",
          "title": "Choose how the order is paid.",
          "copy": "The till requires a payment method. Card-at-counter confirmation places the order; Cash and Mixed use a change window. Payment-link orders follow a different, payment-gated path.",
          "signal": "CARD AT COUNTER / CONFIRMED"
        },
        {
          "label": "Send to kitchen",
          "title": "A placed order and a kitchen ticket.",
          "copy": "After confirmation, the order appears on the board and its kitchen ticket prints. The real system reports unconfirmed or failed printing so staff can recover it.",
          "signal": "ORDER 042 / PRINT CONFIRMED"
        }
      ],
      "slug": "bentopos"
    },
    {
      "id": "venue",
      "name": "Venue operations",
      "sector": "Regulated environments",
      "status": "Confidential development",
      "title": "The room, working as one.",
      "desc": "A connected staff dashboard, mobile experience and operational record for a regulated venue. Client identity kept confidential.",
      "problem": "The floor team and the people waiting need a consistent view of what happens next.",
      "built": "A platform connecting waiting lists, seat allocation and staff actions, with role-based access and an operational audit trail.",
      "proof": "Implemented web, mobile and API work. Shown here as an anonymous development case, without a claim of client endorsement or regulatory certification.",
      "tech": [
        "Next.js",
        "React Native",
        "Hono",
        "PostgreSQL"
      ],
      "next": "A multi-user operational system where permissions, traceability and handovers matter.",
      "asset": "",
      "caption": "Illustrative workflow. No live client data or product screenshots.",
      "chapters": [
        {
          "label": "Waiting list",
          "title": "A checked-in guest joins the queue.",
          "copy": "Staff can see the waiting list and check-in state. This example uses invented guest references and no client data.",
          "signal": "A01 / CHECKED IN / WAITING"
        },
        {
          "label": "Call & seat",
          "title": "A person assigns the place.",
          "copy": "The floor team calls the guest and records a table and seat. Availability changes with the staff action.",
          "signal": "A01 / TABLE 01 / SEAT 03"
        },
        {
          "label": "Record",
          "title": "The next shift can follow what happened.",
          "copy": "Joining, calling and seating produce a dated operational history. This is a development case, not a compliance certification.",
          "signal": "JOINED / CALLED / SEATED"
        }
      ],
      "slug": "venue-operations"
    },
    {
      "id": "holt",
      "name": "Holt",
      "sector": "Property operations",
      "status": "Closed-beta MVP",
      "title": "The working record of a tenancy.",
      "desc": "A landlord control centre: tenancy records, document checks, guided assistance and evidence packs. The first phase of a wider rental trust platform.",
      "problem": "Landlords need a connected record of the tenancy, not another folder of disconnected documents.",
      "built": "The Holt Agent combines a tenancy hub, rent ledger, dated issue history, document and statement analysis, guided assistance, messaging and downloadable evidence packs.",
      "proof": "A working landlord control centre was documented in closed beta in July 2026. The current build supports the tenancy hub and evidence-pack flow. The wider marketplace is a separate early build; trust scoring and smart matching remain planned.",
      "tech": [
        "Next.js",
        "TypeScript",
        "PostgreSQL / Drizzle",
        "Document analysis"
      ],
      "next": "A client portal or operational workspace that brings fragmented information together.",
      "asset": "",
      "caption": "Illustrative tenancy workflow based on the closed-beta build. No real landlord or tenant data.",
      "chapters": [
        {
          "label": "Tenancy hub",
          "title": "One tenancy. Its working record.",
          "copy": "The closed-beta control centre brings rent, documents, messages and tenant issues together. This is the working product documented in July 2026.",
          "signal": "TENANCY HUB / EXAMPLE RECORD"
        },
        {
          "label": "Issue timeline",
          "title": "A repair becomes a dated history.",
          "copy": "A landlord logs an issue, then records acknowledgement and scheduled work. Events preserve the sequence instead of replacing the original report.",
          "signal": "REPORTED / ACKNOWLEDGED / SCHEDULED"
        },
        {
          "label": "Evidence pack",
          "title": "Bring the evidence together.",
          "copy": "The tenancy record can be exported as a summary PDF or a ZIP bundle of originals with a checksum manifest. Statutory notice release is separately gated for legal review.",
          "signal": "SUMMARY PDF / ORIGINALS / MANIFEST"
        }
      ],
      "slug": "holt"
    },
    {
      "id": "translator",
      "name": "OrderLingo",
      "sector": "Kitchen tooling",
      "status": "Deployed internal tool",
      "title": "From the front desk to the wok.",
      "desc": "Scan an English order. Review the match. Print a Chinese kitchen ticket. A practical tool for a bilingual team.",
      "problem": "Orders need to cross a language boundary without losing notes, modifiers or the cook's time.",
      "built": "An iOS tool using on-device OCR, bilingual menu matching, operator review and thermal printing. Free-form notes remain visible for review.",
      "proof": "An internal kitchen tool in maintenance, with ticket scanning, bilingual matching, operator-reviewed notes and thermal printing.",
      "tech": [
        "Swift",
        "Apple Vision",
        "On-device OCR",
        "ESC/POS"
      ],
      "next": "A focused mobile tool that takes a repetitive task off your team's hands.",
      "asset": "assets/orderlingo-menu.webp",
      "caption": "OrderLingo menu. Existing release screenshot.",
      "chapters": [
        {
          "label": "Scan",
          "title": "Read the ticket, not a menu screen.",
          "copy": "The iPhone captures an order ticket. On-device OCR and layout parsing separate ordered dishes from customer notes.",
          "signal": "ON DEVICE / TICKET CAPTURE"
        },
        {
          "label": "Match & review",
          "title": "A suggestion is not an instruction.",
          "copy": "The app matches dishes to its bilingual menu. Note-derived modifiers require the operator to select affected dishes and apply them; an unmatched dish blocks printing.",
          "signal": "MATCH REVIEW / OPERATOR CONFIRMATION"
        },
        {
          "label": "Print",
          "title": "Only the reviewed order reaches the printer.",
          "copy": "The kitchen ticket uses the matched Chinese dish name and applied modifiers. Star and ESC/POS printers are supported; order history remains available.",
          "signal": "REVIEWED / KITCHEN TICKET"
        }
      ],
      "slug": "orderlingo"
    },
    {
      "id": "queenies",
      "name": "Queenie's Mayflower",
      "sector": "Hospitality / digital experience",
      "status": "Website live; app in release preparation",
      "title": "A new chapter. The same kitchen.",
      "desc": "A restaurant identity and digital experience built around the people, food and history of a real business.",
      "problem": "A restaurant with an established kitchen needed a clearer online identity and a direct route from its story to ordering.",
      "built": "A public website with editorial kitchen photography, the restaurant story and embedded ordering, alongside brand collateral and a companion mobile app in release preparation. A separate custom CRM supports coupon-email campaigns to past customers.",
      "proof": "The restaurant website is live at queenies.food. Its separate companion app is in release preparation. No mobile-app launch or sales uplift is claimed.",
      "tech": [
        "Responsive web",
        "Online ordering",
        "Expo / React Native",
        "Next.js"
      ],
      "next": "A customer-facing digital experience that connects your brand to a useful service.",
      "asset": "assets/queenies-kitchen.webp",
      "caption": "Existing kitchen photography from Queenie's public website.",
      "chapters": [
        {
          "label": "Discover",
          "title": "Meet the people behind the food.",
          "copy": "The restaurant website uses real kitchen photography and its story to introduce the business.",
          "signal": "RESTAURANT WEBSITE / LIVE"
        },
        {
          "label": "Order direct",
          "title": "The story leads into ordering.",
          "copy": "A visitor opens the embedded ordering experience from the restaurant website. The current live ordering integration is separate from Bento Ordering, which is still in development.",
          "signal": "WEBSITE / EMBEDDED ORDERING"
        },
        {
          "label": "Keep in touch",
          "title": "A separate route back to the restaurant.",
          "copy": "Alongside the website, a custom customer-retention workflow prepares coupon emails for past customers. A companion app is in release preparation; neither is presented as a completed Bento Ordering migration.",
          "signal": "CUSTOMER RETENTION / COUPON EMAIL"
        }
      ],
      "slug": "queenies-mayflower"
    },
    {
      "id": "ordering",
      "name": "Bento Ordering",
      "sector": "Direct restaurant ordering",
      "status": "In development / demonstrated flow",
      "title": "Your restaurant. Your ordering channel.",
      "desc": "A direct ordering platform for takeaways: checkout, restaurant acceptance and diner tracking. Being developed as a migration option for businesses moving away from GloriaFood.",
      "problem": "Restaurants need a direct ordering channel they can carry forward when an existing provider retires its service.",
      "built": "A restaurant storefront and embeddable ordering surface, card checkout, an owner order inbox, order-state transitions and diner tracking.",
      "proof": "The June 2026 recorded demo follows menu selection, modifiers, Stripe test payment, restaurant acceptance and a tracking update. This is development evidence, not a claim of a live merchant rollout or a completed migration.",
      "tech": [
        "Next.js",
        "TypeScript",
        "PostgreSQL / Supabase",
        "Stripe"
      ],
      "next": "An ordering, booking or customer-service platform owned around your operation.",
      "asset": "",
      "caption": "Illustrative ordering sequence based on implemented order states.",
      "chapters": [
        {
          "label": "Checkout",
          "title": "The customer builds their own order.",
          "copy": "Menu items, modifiers and collection or delivery choices lead into checkout. Example prices and order details are illustrative.",
          "signal": "CART / PENDING PAYMENT"
        },
        {
          "label": "Payment",
          "title": "Payment unlocks submission.",
          "copy": "For an immediate card order, a successful Stripe payment moves the order to submitted. The restaurant is notified and the diner sees confirmation.",
          "signal": "PAYMENT SUCCEEDED / SUBMITTED"
        },
        {
          "label": "Accept",
          "title": "The restaurant takes over.",
          "copy": "The restaurant accepts the order and sets the promised ready time. The diner tracking view reflects the accepted state; preparation is a subsequent staff action.",
          "signal": "RESTAURANT ACCEPTED / TRACKING UPDATED"
        },
        {
          "label": "Prepare & collect",
          "title": "Progress stays visible to the diner.",
          "copy": "The collection path moves through preparing, ready and completed when staff mark it collected. Delivery follows its own dispatch and delivered path.",
          "signal": "PREPARING / READY / COLLECTED"
        }
      ],
      "slug": "bento-ordering"
    }
  ]
}