Skip to content

PascalAI2024/verrow

Repository files navigation

Verrow

Turn messy lead files into verified, quality-scored records.

Verrow workbench banner

Verrow is an open-source lead data quality workbench for messy CSV files from vendors, forms, exports, research lists, scrape jobs, and old CRMs. It helps teams upload files, understand columns, map records into a standard lead schema, score quality, review datasets, and move toward live operational data without burying the workflow in a generic spreadsheet tool.

The name blends verified and row: the product is about turning untrusted rows into records a team can search, score, export, and improve.

The rebooted stack is focused and current: React 19, TypeScript 6, Material UI 9, Vite 8 / Vite+, Rust Axum, and SpacetimeDB 2.2. No CI/CD is included.

Feature Highlights

Area What Verrow Does Status
CSV ingestion Uploads CSV files through the Rust ingest API, samples rows, extracts headers, and reports parser warnings. Implemented
Column mapping Suggests source-to-schema mappings using deterministic heuristics and sample-value patterns. Implemented
Human review Lets users confirm mappings before processing intent is accepted. Implemented
Data quality Defines quality-report tables and UI surfaces for completeness, cleaning suggestions, anomalies, and score review. UI and schema ready
Datasets Provides dataset pages, detail views, file management surfaces, and relationship components. UI ready
Dashboards Includes operational dashboard cards, activity surfaces, and Recharts-powered visualization components. UI ready
Query workflow Provides a natural-language-style query surface for records once live records are available. UI ready
Live state Defines SpacetimeDB tables, reducers, and generated TypeScript bindings for uploads, mappings, jobs, records, activity, and reports. Module ready
Rust services Ships an Axum sidecar for upload, preview, mapping suggestions, confirmation, and process-intent receipts. Implemented
Branding/docs Includes logo, favicon, social card, banner, feature docs, API docs, Mermaid diagrams, security policy, and contribution guide. Ready

Product Workflow

flowchart LR
    Upload["Upload CSV files"]
    Preview["Preview headers and sample rows"]
    Map["Review suggested mappings"]
    Confirm["Confirm schema fields"]
    Process["Record processing intent"]
    Quality["Score quality and flag cleanup"]
    Explore["Browse, chart, query, and export"]

    Upload --> Preview --> Map --> Confirm --> Process --> Quality --> Explore
Loading

Runtime Architecture

flowchart TB
    User["Lead ops user"]
    UI["React 19 + Vite+ Workbench"]
    Ingest["Rust Axum Ingest API"]
    Parser["CSV Preview + Mapping Engine"]
    STDB["SpacetimeDB 2.2"]
    Module["Verrow Rust Module"]
    Bindings["Generated TypeScript Bindings"]

    User -->|"drop CSV / review mappings"| UI
    UI -->|"multipart upload"| Ingest
    Ingest --> Parser
    Parser -->|"headers, sample rows, suggestions"| UI
    UI -->|"confirmed mapping"| Ingest
    Ingest -. "reducer transport bridge" .-> STDB
    STDB --> Module
    STDB --> Bindings
    Bindings -->|"live tables"| UI
Loading

Data Model

erDiagram
    UPLOADED_FILES ||--o{ MAPPING_SUGGESTIONS : produces
    UPLOADED_FILES ||--o{ COLUMN_MAPPINGS : confirms
    UPLOADED_FILES ||--o{ PROCESSING_JOBS : starts
    UPLOADED_FILES ||--o{ DATA_RECORDS : creates
    UPLOADED_FILES ||--o{ DATA_QUALITY_REPORTS : receives
    DATA_RECORDS ||--o{ ACTIVITY_EVENTS : changes

    UPLOADED_FILES {
        string id
        string filename
        string status
        int row_count
        timestamp uploaded_at
    }
    DATA_RECORDS {
        string id
        string full_name
        string email
        string company
        string lead_type
        int quality_score
    }
    PROCESSING_JOBS {
        string id
        string status
        int progress
        string step
    }
Loading

What Is In The App

  • Upload workbench with drag-and-drop CSV intake, progress, and next-step routing.
  • Mapping review screen for source columns, target schema fields, confidence, and confirmation.
  • Dashboard with file status, activity, insights, and visualization panels.
  • Dataset list and detail screens for organizing batches of lead files.
  • Data browser with filtering, deletion affordances, and empty/error states.
  • Analysis/query screen for turning records into answers once live records are flowing.
  • Settings for mapping behavior and optional provider-backed mapping experiments.
  • SpacetimeDB provider and hooks for files, jobs, records, activity, and connection status.

Quick Start

cp .env.example .env
docker compose up --build

Then open:

Local Development

Install frontend dependencies:

npm ci --prefix frontend

Run the Rust ingest API:

cargo run --manifest-path rust-services/ingest-api/Cargo.toml

Run the frontend:

npm run dev --prefix frontend

Useful project commands:

npm run build
npm run rust:test
npm run rust:check
npm run spacetime:build
npm run spacetime:generate
npm run docker:up

Vite+ commands are available in the frontend package:

npm run check:vite-plus --prefix frontend
npm run build:vite-plus --prefix frontend
npm run lint:vite-plus --prefix frontend

API Highlights

  • GET /health returns Rust ingest health and reducer transport state.
  • POST /v1/csv/uploads uploads a CSV, samples rows, and returns mapping suggestions.
  • POST /v1/mapping/suggestions returns heuristic mapping suggestions for supplied headers.
  • POST /v1/uploads/:upload_id/confirm validates confirmed mappings and records reducer intent.
  • POST /v1/uploads/:upload_id/process records processing intent for the upload.

Project Status

Verrow is public, MIT licensed, and ready to use as portfolio proof for lead-data ingestion, mapping, data-quality, Rust service, and React workbench architecture.

Verified locally on 2026-05-18:

  • npm run rust:test passes: 5 Rust ingest API tests.
  • npm run build --prefix frontend passes: TypeScript + Vite production build.
  • gitleaks detect --source /repo --redact --no-git passes in Docker: no leaks found.

Verrow currently has a working Rust upload and mapping path plus a SpacetimeDB module with the live tables and reducers the product needs. The remaining backend milestone is replacing the Rust sidecar's no-op reducer transport with a real SpacetimeDB client bridge so confirmed uploads produce live data_records, quality reports, job progress, and activity events.

The UI already contains the broader workbench surface so the product direction is visible: upload, mapping, dashboards, charts, datasets, data browsing, query, settings, and live-state hooks.

Repository Layout

frontend/       React workbench, dashboard, charts, upload and mapping UI
rust-services/  Rust sidecars, starting with the Axum ingest API
spacetimedb/    SpacetimeDB Rust module for live tables and reducers
shared/         Shared TypeScript lead-data types
docs/           Features, API docs, architecture diagrams, roadmap, brand notes

Documentation

License

MIT. See LICENSE.

About

Open lead data quality workbench for turning messy CSVs into mapped, verified, quality-scored records.

Topics

Resources

License

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages