ByteHint Logo™
HomeServices
Industries
Resources
About Us
Contact
ByteHintByteHintByteHintByteHint
ByteHint Logo

Building innovative solutions for the digital future. Transform your ideas into reality with our cutting-edge technology.

Quick Links

HomeAbout UsBlogCase StudiesContactClient Testimonials

Legal

Privacy PolicyTerms & ConditionsRefund Policy

Get In Touch

Veerbhadra Nagar
Pune City, Maharashtra
India 411045

info@bytehint.com
+91 93709 55842
© 2026 ByteHint. All rights reserved.
Case studiesScri8e

Scri8e: one shared brain across Slack, Notion and Google Drive

Scri8e reads across Slack, Google Drive and Notion and turns them into one brain your team can ask. Plain answers, every source shown, and a straight warning the moment something goes out of date.

Client
ByteHint
Industry
Productivity and knowledge software
Type
Web App

Navigate

The problem

In a 10 to 50 person company, how things work is written down in three places at once: chat threads, wiki pages and shared documents. The same question has several answers of different ages.

Search tools rank results by wording, not by how current they are, and an assistant that reads everything risks showing people files they could not open in the original tool.

  1. 01

    Knowledge split across three tools

  2. 02

    Access must match the source tool

  3. 03

    Knowledge held by one person

  4. 04

    Old answers outrank current ones

  5. 05

    Answers must be checkable

The solution

Scri8e pulls content from Slack, Notion and Drive into one Postgres database with vector search. Every answer comes with citations, and every result passes a permission check inside the query, so people only see what they could open in the original tool.

Cited, streaming answers

Answers stream over Server-Sent Events with numbered citations. Only sources the model actually cited are returned, renumbered in order, with tool, date and link.

Answers respect source permissions

Slack private-channel membership, per-file Google Drive sharing and restricted uploads are enforced inside every search query. Missing permission data means hidden, never visible.

Per-teammate Google Drive connections

Each teammate connects their own Drive and picks folders to index. The file owner's sync decides who can see each file.

Scoped, cancellable syncs

Drive and Notion index nothing until folders or pages are picked. Large syncs run in groups of 100 with live progress and a safe cancel between groups.

Current or aging stamp

Cited sources are scored against half-lives by document category (process, decision, reference, ephemeral). A caveat appears when an answer rests on one source or old material.

Uploads with an approval queue

Admins and, if allowed, members upload PDF or text files with workspace or restricted visibility. Member uploads wait for approval and never appear in answers until approved.

Roles and audit log

Owner, admin and member roles on every route, with escalation and last-owner guards. Connects, uploads, approvals, role changes and every denied request are written to an audit log.

Freshness and health reports

Admins see how much of the knowledge base is current or aging, the oldest documents, connector state and duplicate or orphaned data.

How it works

An admin connects Slack and Notion, and each teammate connects their own Google Drive and picks the folders to index. Anyone can then ask a question in a chat screen. The answer streams in with numbered citations, and each source card shows the tool, the last-edited date and a link back to the original. A small stamp also notes whether the sources are recent.

Setting up a workspace · User Flow

Setting up a workspace
An admin connects Slack and Notion and invites the team; each teammate connects their own Drive.

Key decisions

Keep content and access rules together

Chose One database for both content and permissions over Separate specialised stores

Access is checked in the same step that finds results, so people never see what they should not.

Blend two kinds of search

Chose Meaning-based and keyword search together over A single search method

Team knowledge mixes exact terms with loose wording, and either method alone misses things.

Background work that can stop safely

Chose A simple job queue with safe stop points over A heavier job framework

Long imports can be cancelled cleanly without leaving half-finished data behind.

Access comes from the source

Chose Permissions taken from each tool's own records over One shared connection for the whole team

Only a file's owner sees its full sharing details, so access has to be read from the source.

Models are a setting, not code

Chose Model choice controlled through configuration over Models fixed in the code

Switching models becomes a configuration change instead of a rebuild.

PermissionsSecurity & Access
One shared SQL CTE applies Slack private-channel membership, per-file Google Drive sharing, restricted uploads and approval status to every search path, inside the query. Missing permission data means hidden.
Eventual consistencyArchitecture · Partial
Google shows full sharing lists only to a file's owner, so each teammate connects their own Drive. A pure, unit-tested function lets the owner's sync claim the file and write its ACL, so access converges as owners connect.
Message queuesArchitecture
Redis and RQ run ingest jobs in groups of 100 with one embedding call per group, progress reporting, in-flight job dedup and a cancel flag checked between groups.
Automated testingEngineering & Delivery
302 backend tests: 249 unit tests, plus 53 integration tests that run real SQL against Postgres with pgvector in an isolated schema, covering ACL enforcement, ranking and ingest invariants.
Role-based access control (RBAC)Security & Access
Owner, admin and member roles on every route via FastAPI dependencies, with escalation and last-owner guards. A test checks every route's role against a written matrix.

How we delivered it

  1. Phase 1

    Slack MVP

  2. Phase 2

    More sources, better retrieval

  3. Phase 3

    Hardening

  4. Phase 4

    Per-document access and real-database tests

  5. Phase 5

    Hosting and launch prep

Results

3

Sources connected: Slack, Notion and Google Drive

Each via Nango, with source permissions mirrored per document (backend/app/services/nango.py, services/search.py).

302

Automated backend tests

249 unit tests plus 53 integration tests that run against a real Postgres with pgvector (backend/tests/).

49

API routes checked against a written role matrix

A test reads the role dependency off every route and compares it to docs/rbac-matrix.md.

Tech stack

Languages & Runtime

  • Python3.12API, background workers, scheduler and tests
  • TypeScript5.9.3All frontend code

Frameworks

  • Next.js16.2.7App Router frontend, marketing site and middleware route protection
  • FastAPI0.135.1REST API and Server-Sent Events answer streaming

UI

  • React19.2.4UI for the app and the marketing site
  • Tailwind CSS4.3.0Styling with design tokens shared by the app and the site
  • shadcn/uiCopied-in UI primitives in components/ui
  • Radix UI1.1Dialog, Slot, Tabs and Tooltip primitives
  • Motion12.40.0Limited UI motion with reduced-motion support
  • Lucide1.17.0Icons
  • react-markdown10.1.0Rendering streamed answers

Backend Libraries

  • Uvicorn0.41.0ASGI server for the API container
  • Pydantic2.12.5Request validation and env-driven settings
  • SQLAlchemy2.0.51Async ORM models plus raw SQL for retrieval
  • asyncpg0.31.0Async Postgres driver
  • HTTPX0.28.1Calls to Nango, Ollama and the JWKS endpoint
  • RQ2.10.0Background ingest jobs with cooperative cancellation
  • rq-scheduler0.13Daily sync and six-hourly reconcile jobs
  • pypdf6.14.2PDF text extraction for uploads

Database & Storage

  • PostgreSQLPrimary store for documents, ACLs, conversations and the audit log
  • pgvector768-dimension embeddings with an HNSW index next to the data
  • SupabaseHosted Postgres and authentication
  • Redis7Job queue, job metadata and cancel flags

AI & ML

  • OllamaLocal embedding server with nomic-embed-text, 768 dimensions
  • GroqHosted LLM for answers, titles and document categorisation
  • OpenAI Python SDK2.45.0Client for Groq's OpenAI-compatible endpoint

Third-party APIs

  • NangoOAuth connections and API proxy for Slack, Notion and Drive
  • Slack APIChannels, messages, threads and members
  • Notion API2022-06-28Pages, databases and rows
  • Google Drive APIv3Files, sharing permissions and text exports

Auth

  • python-jose3.5.0JWT verification against Supabase JWKS
  • Supabase AuthSign-in, cookie sessions and JWT issuance

Cloud & Infrastructure

  • VercelFrontend hosting
  • Caddy2TLS reverse proxy with automatic HTTPS

IaC & Deployment

  • DockerOne backend image for API, worker and scheduler
  • Docker ComposeRuns API, worker, scheduler, Redis and Caddy on one server

Testing

  • pytest9.1.1302 backend tests, 53 of them against a real database

Dev Tooling

  • ESLint9.39.4Frontend linting

Links

  • Scri8e websiteLive site

Have a similar challenge?

Tell us what you're building and we'll show you how we'd approach it.

Talk to us

Navigate

Get started with
your project

More case studies

A one-month deadline, no team, and a working team in eight days
Consumer apps and creator economy
AI Social App Team BuildProject

A one-month deadline, no team, and a working team in eight days

A studio promised its creator client an AI social app in a month with one developer. We scoped the real need and had four roles working eight days after the first call.

React NativeExpoLLM orchestration
Velocity Tweaks: a design-first e-commerce site that reached a 25% CTR
Gaming and PC optimization
Velocity TweaksWebsite

Velocity Tweaks: a design-first e-commerce site that reached a 25% CTR

A full-stack, design-first e-commerce build for a PC optimization brand, with cart, checkout and key delivery, that reached a client-reported 25% CTR in a low-conversion niche.

ReactExpressStripe
An Amazon deals bot that posts the best gaming discounts to Discord
Gaming and PC optimization
Amazon Deals BotBot

An Amazon deals bot that posts the best gaming discounts to Discord

A Discord bot that pulls the best gaming deals from Amazon through its Product Advertising API and posts them to the community every four hours.

Pythondiscord.pyAmazon Product Advertising API