PersonalMedium

Dynamic Records System

Laravel API for building custom data-entry templates at runtime, then collecting and validating records against them without writing new code.

— Overview

Architecture Overview

erDiagram
    TEMPLATE ||--o{ FIELD : defines
    FIELD ||--o{ OPTION : offers
    TEMPLATE ||--o{ RECORD : produces
    RECORD ||--o{ VALUE : holds
    FIELD ||--o{ VALUE : types
    OPTION ||--o{ VALUE : constrains
    USER ||--o{ RECORD : creates

A generic data-entry engine. Instead of modelling one domain, it models the act of modelling: an administrator defines a template, gives it fields of a chosen type, and the system then accepts, validates and stores records against that template. Adding a new kind of form requires no migration and no deployment.

The schema separates templates, fields, options, records and values, so a select, radio or checkbox field draws its permitted answers from a predefined option set and every stored value is checked against it. Originally written to hold medical records, the design is domain-agnostic.

Key Features:

  • Runtime template creation with named, ordered, optionally required fields
  • Seven field types: text, select, radio, checkbox, date, number and boolean
  • Option sets backing every choice-style field, enforced on write
  • Automatic validation of required fields and permitted option values
  • Records grouped and queried by their template
  • Admin and standard user roles with distinct permissions
  • API-first design with token authentication via Laravel Sanctum

Tech Stack:

  • Backend: Laravel, PHP, Sanctum
  • Views: Blade
  • Database: MySQL
— Stack
PHPLaravelMySQLREST APIBlade