glanzlicht / GastroOS
Verified secure showcase
500 Files 1 MB Public size 31 Redacted TypeScript · SQL · JSON · Markdown · DOCKERIGNORE · EXAMPLE

Project overview

GastroOS is a verified code showcase with 500 visible project entries across 3 top-level modules. The primary detected language is TypeScript; protected files remain visible in the structure while their contents stay private.

README

GastravaOS

GastravaOS is a modular Hospitality Operational Intelligence Platform.

The technical repository name remains GastroOS for compatibility. The product is presented publicly as GastravaOS.

Product preview

GastravaOS operations dashboard

GastravaOS is designed for hospitality operations ranging from small venues to larger multi-location organizations. The platform combines operational workflows, resilient data handling and role-specific user experiences without exposing internal complexity to operators.

What this repository demonstrates

This repository is presented as a technical portfolio showcase, not as a complete product blueprint.

It demonstrates work across:

  • backend engineering with Node.js, TypeScript, NestJS and REST/OpenAPI;
  • PostgreSQL data modeling, explicit SQL migrations and transactional consistency;
  • Flutter application architecture with Riverpod, go_router, Drift/SQLite and Dio;
  • operational workflows across hospitality domains;
  • offline-capable client foundations and synchronization patterns;
  • real-time state reconciliation and event-driven integration patterns;
  • integrations for storage, payments, fiscal/accounting systems and external platforms;
  • Docker-based development, CI, observability and runtime verification;
  • tenant-aware security, audit-oriented design and permission boundaries;
  • applied AI around deterministic domain data and human-controlled actions.

Technology stack

AreaTechnology
BackendNode.js 24 LTS, TypeScript, NestJS 11
APIREST / OpenAPI
DatabasePostgreSQL 18, Drizzle ORM, explicit SQL migrations
FrontendFlutter, Riverpod, go_router
Local dataDrift / SQLite
NetworkingDio, json_serializable
InfrastructureDocker Compose, S3-compatible storage
ArchitectureModular monolith, transactional outbox
QualityAutomated tests, CI, observability and runtime verification

Engineering approach

The codebase is organized around clear boundaries and reusable platform capabilities rather than one large feature layer.

Recurring engineering principles include:

  • deterministic and auditable domain state;
  • separation of operational truth from presentation;
  • role- and context-specific interfaces;
  • resilience under intermittent connectivity;
  • explicit integration adapters;
  • composable capabilities instead of duplicated vertical implementations;
  • controlled exposure of sensitive business, security and product logic.

Portfolio boundary

The public showcase intentionally omits detailed roadmaps, ADRs, security internals, commercial logic, AI prompts, operational playbooks and reconstructable product strategy.

Those materials remain in the private repository. The public view is optimized so technical reviewers can evaluate engineering breadth and implementation quality without receiving a reconstruction guide for the product.

Local development

The repository uses a versioned pnpm dependency graph.

corepack enable
pnpm install --frozen-lockfile

Project-specific runtime and verification details remain in the private engineering documentation.

Status

GastravaOS is under active development. The repository contains a broad implementation foundation and ongoing product work rather than a finished commercial release.

The public showcase focuses on engineering capability, architecture quality and implementation breadth while deliberately omitting core IP.

apps/backend/src/infrastructure/database/migrations/0030_sprint_o_offline_realtime.sqlSQL
-- Sprint O — offline sync, conflicts, replay protection and realtime delivery.
create table if not exists sync_clients (
id uuid primary key default gen_random_uuid(),
organization_id uuid not null references organizations(id) on delete cascade,
location_id uuid not null references locations(id) on delete cascade,
user_id uuid references user_accounts(id) on delete set null,
device_id text not null,
platform text,
app_version text,
last_seen_at timestamptz not null default now(),
last_successful_sync_at timestamptz,
created_at timestamptz not null default now(),
constraint sync_clients_device_unique unique(organization_id,location_id,device_id)
);
create table if not exists sync_commands (
id uuid primary key default gen_random_uuid(),
organization_id uuid not null references organizations(id) on delete cascade,
location_id uuid not null references locations(id) on delete cascade,
sync_client_id uuid not null references sync_clients(id) on delete cascade,
client_command_id text not null,
command_type text not null,
aggregate_type text,
aggregate_id uuid,
base_version bigint,
payload jsonb not null,
status text not null default 'received',
result jsonb,
error_code text,
error_details jsonb,
received_at timestamptz not null default now(),
processed_at timestamptz,
constraint sync_command_status_check check(
status in ('received','applied','conflict','rejected','retryable')
),
constraint sync_command_client_id_unique unique(sync_client_id,client_command_id)
);
create index if not exists idx_sync_commands_client_status
on sync_commands(sync_client_id,status,received_at);
create table if not exists sync_conflicts (
id uuid primary key default gen_random_uuid(),
organization_id uuid not null references organizations(id) on delete cascade,
location_id uuid not null references locations(id) on delete cascade,
sync_command_id uuid not null references sync_commands(id) on delete cascade,
conflict_type text not null,
aggregate_type text,
aggregate_id uuid,
client_base_version bigint,
server_version bigint,
server_snapshot jsonb,
client_payload jsonb not null,
resolution text,
resolved_at timestamptz,
created_at timestamptz not null default now(),
constraint sync_conflict_type_check check(
conflict_type in ('version_mismatch','deleted','authorization_changed','business_rule','duplicate_semantic')
)
);
create index if not exists idx_sync_conflicts_location_unresolved
on sync_conflicts(location_id,resolved_at,created_at);
create table if not exists realtime_channels (
id uuid primary key default gen_random_uuid(),
organization_id uuid not null references organizations(id) on delete cascade,
location_id uuid not null references locations(id) on delete cascade,
channel_key text not null,
sequence bigint not null default 0,
updated_at timestamptz not null default now(),
constraint realtime_channel_unique unique(location_id,channel_key)
);
create table if not exists realtime_events (
id uuid primary key default gen_random_uuid(),
organization_id uuid not null references organizations(id) on delete cascade,
location_id uuid not null references locations(id) on delete cascade,
channel_key text not null,
sequence bigint not null,
event_type text not null,
aggregate_type text,
aggregate_id uuid,
payload jsonb not null,
occurred_at timestamptz not null default now(),
expires_at timestamptz,
constraint realtime_event_sequence_unique unique(location_id,channel_key,sequence)
);
create index if not exists idx_realtime_events_channel_sequence
on realtime_events(location_id,channel_key,sequence);
create table if not exists realtime_client_cursors (
id uuid primary key default gen_random_uuid(),
organization_id uuid not null references organizations(id) on delete cascade,
location_id uuid not null references locations(id) on delete cascade,
sync_client_id uuid not null references sync_clients(id) on delete cascade,
channel_key text not null,
last_sequence bigint not null default 0,
updated_at timestamptz not null default now(),
constraint realtime_cursor_unique unique(sync_client_id,channel_key)
);
create table if not exists sync_health_snapshots (
id uuid primary key default gen_random_uuid(),
organization_id uuid not null references organizations(id) on delete cascade,
location_id uuid not null references locations(id) on delete cascade,
sync_client_id uuid references sync_clients(id) on delete set null,
pending_commands integer not null default 0,
conflict_count integer not null default 0,
oldest_pending_seconds integer,
realtime_connected boolean,
last_server_sequence bigint,
captured_at timestamptz not null default now()
);
insert into permissions(permission_key,description) values
('sync.read','Read sync health'),
('sync.resolve','Resolve sync conflicts'),
('realtime.read','Subscribe to realtime channels')
on conflict(permission_key) do nothing;

Architecture

High-level modules detected from the verified public snapshot. Protected implementation details are intentionally omitted.

appsmodule
.vscodemodule
.githubmodule

Technology stack

TypeScriptSQLMarkdownJSONGITIGNOREDOCKERIGNORENode.js / JavaScript ecosystem
TypeScript68.8%
SQL20.0%
Markdown10.9%
JSON0.3%
GITIGNORE0.1%
DOCKERIGNORE0.0%
CJS0.0%
MJS0.0%