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/0035_sprint_q_completion.sqlSQL
-- Sprint Q completion — atomic reservation commit, public menu and booking message tracking.
create table if not exists public_menu_configs (
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,
is_enabled boolean not null default false,
show_prices boolean not null default true,
show_allergens boolean not null default true,
created_at timestamptz not null default now(),
updated_at timestamptz not null default now(),
version bigint not null default 1,
constraint public_menu_config_location_unique unique(location_id)
);
create table if not exists booking_message_deliveries (
id uuid primary key default gen_random_uuid(),
organization_id uuid not null references organizations(id) on delete cascade,
reservation_id uuid not null references reservations(id) on delete cascade,
message_type text not null,
recipient_email text,
locale text not null,
status text not null default 'queued',
provider text,
provider_message_id text,
attempt_count integer not null default 0,
next_attempt_at timestamptz,
last_error text,
created_at timestamptz not null default now(),
sent_at timestamptz,
constraint booking_message_type_check check(
message_type in ('booking_confirmed','booking_pending','booking_cancelled')
),
constraint booking_message_status_check check(
status in ('queued','sending','sent','failed','dead_letter')
),
constraint booking_message_unique unique(reservation_id,message_type)
);
create index if not exists idx_booking_message_queue
on booking_message_deliveries(status,next_attempt_at,created_at);
-- Atomic public booking commit.
-- A location/date advisory transaction lock serializes capacity decisions for the same service day.
create or replace function public_booking_commit(
p_reservation_id uuid,
p_organization_id uuid,
p_location_id uuid,
p_guest_id uuid,
p_start_at timestamptz,
p_end_at timestamptz,
p_party_size integer,
p_status text,
p_source text,
p_guest_name text,
p_guest_phone text,
p_guest_email text,
p_notes text,
p_requested_locale text
)
returns table(reservation_id uuid, reservation_status text)
language plpgsql
as $$
declare
v_capacity integer;
v_occupied integer;
v_business_day date;
begin
if p_status not in ('pending','confirmed') then
raise exception 'public booking invalid initial status'
using errcode='22023';
end if;
select (p_start_at at time zone l.timezone)::date
into v_business_day
from locations l
where l.id=p_location_id and l.organization_id=p_organization_id and l.status='active';
if v_business_day is null then
raise exception 'public booking location unavailable'
using errcode='P0001';
end if;
perform pg_advisory_xact_lock(
hashtextextended(p_location_id::text || ':' || v_business_day::text, 0)
);
select coalesce(sum(st.max_capacity),0)::integer
into v_capacity
from service_tables st
where st.organization_id=p_organization_id
and st.location_id=p_location_id
and st.status='active';
select coalesce(sum(r.party_size),0)::integer
into v_occupied
from reservations r
where r.organization_id=p_organization_id
and r.location_id=p_location_id
and r.status in ('pending','confirmed','arrived','seated')
and r.start_at < p_end_at
and r.end_at > p_start_at;
if v_occupied + p_party_size > v_capacity then
raise exception 'public booking slot unavailable'
using errcode='P0001';
end if;
insert into reservations(
id,organization_id,location_id,guest_id,start_at,end_at,party_size,
status,source,guest_name_snapshot,guest_phone_snapshot,guest_email_snapshot,
notes,requested_locale
) values(
p_reservation_id,p_organization_id,p_location_id,p_guest_id,p_start_at,p_end_at,p_party_size,
p_status,p_source,p_guest_name,p_guest_phone,p_guest_email,p_notes,p_requested_locale
);
return query select p_reservation_id,p_status;
end;
$$;
insert into permissions(permission_key,description) values
('public_menu.settings.manage','Manage public menu settings')
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%