An open API service indexing awesome lists of open source software.

https://github.com/ihkaru/cerdas

Open-source, self-hosted AppSheet alternative. Build offline-first mobile apps for data collection without code. Unlimited users, Docker-ready, and powered by Vue & Laravel
https://github.com/ihkaru/cerdas

android appsheet-alternative capacitor data-collection docker form-builder frankenphp laravel no-code offline-first pwa self-hosted vue

Last synced: 2 months ago
JSON representation

Open-source, self-hosted AppSheet alternative. Build offline-first mobile apps for data collection without code. Unlimited users, Docker-ready, and powered by Vue & Laravel

Awesome Lists containing this project

README

          

# 🧠 Cerdas

### Open-Source Self-Hosted AppSheet Alternative

**Build, deploy, and manage mobile data collection apps β€” no code required.**

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Laravel 12](https://img.shields.io/badge/Laravel-12-FF2D20?logo=laravel&logoColor=white)](https://laravel.com)
[![Vue 3](https://img.shields.io/badge/Vue-3-4FC08D?logo=vue.js&logoColor=white)](https://vuejs.org)
[![FrankenPHP](https://img.shields.io/badge/FrankenPHP-Octane-8B5CF6?logo=php&logoColor=white)](https://frankenphp.dev)
[![Build APK](https://github.com/ihkaru/cerdas/actions/workflows/build-android.yml/badge.svg)](https://github.com/ihkaru/cerdas/actions/workflows/build-android.yml)
[![Octane Audit](https://github.com/ihkaru/cerdas/actions/workflows/octane-audit.yml/badge.svg)](https://github.com/ihkaru/cerdas/actions/workflows/octane-audit.yml)

[Download APK](https://github.com/ihkaru/cerdas/releases/latest) Β· [Quick Start](QUICKSTART.md) Β· [Documentation](docs/) Β· [Roadmap](ROADMAP.md)

---

## Why Cerdas?

Most no-code platforms come with **heavy restrictions**. Cerdas was born out of the frustration with AppSheet's limit of **only 10 users** for the free tier.

| | AppSheet | KoboToolbox | **Cerdas** |
|-------------------|----------------|-------------|-------------------------|
| **Self-Hosted** | ❌ | βœ… | βœ… |
| **User Limit** | 10 (free) | Unlimited | **Unlimited** |
| **Offline-First** | Partial | ❌ | βœ… |
| **Custom Hosting**| ❌ | Complex | **Docker one-click** |
| **Monthly Cost** | $10/user | Free | **Free** |

## Key Features

- **πŸ“± Offline-First Mobile Client** β€” Built with Framework7 + Capacitor. Operates fully offline using SQLite and syncs data when connectivity is restored.
- **πŸ› οΈ Visual Form Editor** β€” Web-based builder for complex schemas, with support for nested forms, repeating groups, conditional fields, and dynamic options.
- **🧠 JS Expression Engine** β€” Write custom JavaScript closures directly in the editor to control validation (`Warning`), field visibility (`Show If`), edit access (`Editable If`), pre-calculated values (`Formula`), and default values (`Initial Value`).
- **πŸ”„ Bi-directional Sync** β€” Background synchronization with conflict handling for large datasets and binary media attachments.
- **πŸ—ΊοΈ GPS + Map** β€” Native coordinate capture with accuracy metadata and offline-capable map previews via MapLibre GL.
- **πŸ“Š Data Export** β€” Export submissions to Excel/CSV for downstream analysis.
- **πŸ” Role-Based Access** β€” Granular RBAC via Spatie Laravel Permission.
- **⚑ High-Throughput Backend** β€” Laravel Octane with FrankenPHP worker mode for sustained high concurrency.
- **πŸ€– Automated CI/CD** β€” GitHub Actions for APK builds, Octane safety audits, code quality checks, and secret scanning.

## Architecture

```text
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Monorepo (pnpm workspaces) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ apps/client β”‚ apps/editor β”‚ apps/backend β”‚ packages/ β”‚
β”‚ Mobile PWA β”‚ Web Editor β”‚ Laravel API β”‚ Shared β”‚
β”‚ Vue 3 + F7 β”‚ Vue 3 + F7 β”‚ Octane + β”‚ Libs β”‚
β”‚ Capacitor β”‚ β”‚ FrankenPHP β”‚ β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Docker Compose β”‚ GitHub Actions β”‚
β”‚ FrankenPHP Β· Redis Β· MySQL β”‚ APK Build Β· Audit β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

| Layer | Technology | Purpose |
|-------|-----------|---------|
| **API Server** | Laravel 12 + Octane + FrankenPHP | High-performance API (worker mode) |
| **Mobile Client** | Vue 3 + Framework7 + Capacitor | Offline-first PWA / Android APK |
| **Form Editor** | Vue 3 + Framework7 | No-code visual form builder |
| **Shared Packages** | TypeScript | Form engine, expression engine |
| **Database** | MySQL (server) Β· SQLite (client) | Server-side + offline-first storage |
| **Auth** | Laravel Sanctum + Google OAuth | Token-based API authentication |
| **CI/CD** | GitHub Actions | APK builds, audits, quality checks |
| **Deployment** | Docker Compose + Coolify | One-click self-hosted deployment |

## Quick Start

### Prerequisites

- **PHP 8.2+** with `pcntl` extension
- **Node.js 22+**
- **pnpm** (`npm install -g pnpm`)
- **Composer**
- **Docker** (for the Docker-based workflow)

### Option A β€” Docker (Recommended)

```bash
git clone https://github.com/ihkaru/cerdas.git
cd cerdas

# Start all services (Backend + Client + Editor) in Docker
./start-dev-docker.sh
```

### Option B β€” Local Setup

```bash
git clone https://github.com/ihkaru/cerdas.git
cd cerdas

# Install all dependencies
pnpm install

# Setup backend
cd apps/backend
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate
cd ../..

# Start all services (Windows)
./start-all.bat

# Start all services (Linux/Mac)
./start-all.sh
```

### Verification

Run this before pushing to ensure the build is clean.

```bash
# Linux / Mac
./verify-local.sh

# Windows (PowerShell)
./verify-local.ps1
```

### Production (Docker)

```bash
docker compose -f docker-compose.prod.yml up -d
```

> See [Coolify Deployment Guide](COOLIFY_GUIDE.md) for managed hosting setup.

## Project Structure

```
cerdas/
β”œβ”€β”€ apps/
β”‚ β”œβ”€β”€ backend/ # Laravel 12 API (Octane + FrankenPHP)
β”‚ β”œβ”€β”€ client/ # Mobile PWA (Vue 3 + Framework7 + Capacitor)
β”‚ └── editor/ # Web Editor (Vue 3 + Framework7)
β”œβ”€β”€ packages/
β”‚ β”œβ”€β”€ form-engine/ # Shared form rendering library
β”‚ └── expression-engine/ # JS expression evaluator for dynamic field logic
β”œβ”€β”€ scripts/ # Automation & audit scripts
β”œβ”€β”€ .github/workflows/ # CI/CD pipelines
└── docker-compose.prod.yml
```

## CI/CD Pipelines

| Workflow | Trigger | Purpose |
|----------|---------|---------|
| **Build APK** | Push to `main` (client changes) | Auto-build signed APK β†’ GitHub Releases |
| **Octane Audit** | Push to `main` (backend changes) | Detect memory leak patterns before deploy |
| **Code Quality** | Push to `main` (apps changes) | ESLint (Vue/TS) + Laravel Pint (PHP) |
| **Secret Scan** | Push to `main` (all) | Detect leaked credentials/keys |

## Security

- All secrets managed via GitHub Secrets / environment variables
- Automated credential leak detection via pre-commit hooks
- Octane-safe code patterns enforced by CI

## License

[MIT License](LICENSE) β€” free to use, modify, and distribute.

---


Built with ❀️ for field data collection teams.