~/projects/cyclixPersonal Project · 2026

CYCLIX_

Mobile SaaS app for industrial maintenance. Manage machines, maintenance cycles and spare parts digitally — with AI-powered nameplate recognition via Claude API, role-based team management and automatic push notifications.

GitHub
Claude APIReact NativeTypeScriptSupabaseExpo

Indie SaaS

fully self-built

3 Roles

Admin · Planner · Technician

Claude Haiku

AI nameplate recognition

iOS & Android

Cross-Platform with Expo

// Screenshots

Login

// Features

01

AI Nameplate Recognition

Take a photo of a machine nameplate — Claude Haiku analyses it and automatically fills in name, manufacturer, model and serial number. The AI runs as an Edge Function; the API key never leaves the device.

02

Maintenance Management

Create maintenance cycles with intervals, automatically calculate due dates and record logs — including spare parts, quantities, costs and PDF uploads.

03

Dashboard & Status Overview

KPI cards for overdue, this week's and this month's maintenance. Colour-coded indicators and a filterable list of all upcoming appointments at a glance.

04

Role-Based Team Management

Three roles with graduated permissions: Admin (full access), Planner (CRUD assets & maintenance), Technician (read & log). Team invitations via generated codes with expiry dates.

05

Asset Register

Create, edit and archive machines by department. Full maintenance history per asset — including photos, documents and spare part usage.

06

Push Notifications

pg_cron sends a daily request at 07:00 UTC to the Edge Function, which identifies all due maintenance tasks and notifies organisation members via the Expo Push API.

// Tech Stack

MobileReact Native (Expo)
MobileTypeScript
Mobileexpo-router
BackendSupabase (PostgreSQL)
BackendSupabase Auth
BackendSupabase Storage
BackendEdge Functions (Deno)
Backendpg_cron
AIClaude Haiku API
ToolingEAS Build

// Architecture Highlights

FOR UPDATE Lock in the Invite Flow

Redeeming invitation codes uses a PostgreSQL row lock to prevent race conditions under concurrent access — correct concurrency handling in a multi-user environment.

AI as a Serverless Edge Function

Nameplate recognition runs as a Supabase Edge Function: image and prompt are sent server-side to Claude Haiku, the API key never leaves the device and costs remain controllable.

Multi-Tenant Isolation via Row Level Security

Every database query is restricted to organisation level by RLS policies — users only see data from their own organisation, without any filter logic in the app code.

Client-Side Status Calculation

Overdue, this week, this month — status classification happens entirely in lib/utils.ts based on next_due_at, without additional database queries.

pg_cron for Push Notifications

A database cron job sends a daily HTTP POST at 07:00 UTC to the notify-maintenance Edge Function, which identifies due maintenance tasks and notifies users via the Expo Push API.

← Back to Projects