← Back to selected work

Case study / Healthtech

integra odonto app

From firsthand dental practice workflows to an AI-assisted full-code platform.

My role
Founder & Technical Product Lead
Timeline
2022–present; full-code transition from March 2025
Evidence
Inspected source + a read-only synthetic patient review

I’m Felipe Peloggia, a dental practice co-founder and technical product builder. I built the AppSheet generation independently, then initiated the full-code transition. I own requirements, domain modeling, UX behavior, acceptance criteria and major system-design decisions, using AI as the implementation workhorse.

This case study describes a bounded evidence set. It does not establish production readiness, successful clinical writes or runtime organization isolation.

01 / Problem & constraints

Keep the clinical context in view.

Dental practice work spans patient registration, scheduling, clinical records, treatment planning and finance. integra odonto app brings these domains into one application for dental practice workflows.

My clinical and operational background informs how I model those workflows and define expected product behavior. The project moved from an AppSheet application toward a React, TypeScript, Express and PostgreSQL platform through AI-assisted implementation.

The presentation has its own constraints: patient information must stay private, personal design ownership must be distinguished from implementation, and a visible interface must not be mistaken for a verified clinical action. The journey below uses only approved synthetic records and read-only observations.

02 / A product journey

Find a patient. Review their context.

Three real application captures show a synthetic patient search, summary and existing clinical timeline. Product labels remain in Portuguese; the annotations here are in English. Each view was reproduced twice using direct route entry in an approved synthetic environment on 28 October 2026.

  1. Step 1

    Find the synthetic patient

    Filtering the patient list isolates an explicitly synthetic record. Identifying and contact fields are unfilled. This demonstrates the observed filter result, not patient creation or validation.

    Filtered patient list showing one explicitly synthetic patient and unfilled identification and contact fields.
    Real application · Synthetic data · Read-only observation. Open image at full size ↗
  2. Step 2

    Review the patient summary

    The summary makes missing registration fields visible alongside clinical action controls. Those controls provide interface context; their actions were not exercised.

    Synthetic patient summary with an incomplete-registration notice, empty demographic fields, and clinical action controls.
    Real application · Synthetic data · Read-only observation. Open image at full size ↗
  3. Step 3

    Inspect the existing clinical timeline

    The read-only timeline shows one completed attendance and a linked appointment, with no recorded procedures. These counts describe the synthetic fixture, not business outcomes.

    Synthetic patient clinical timeline showing one completed attendance, zero procedures, and one appointment linked to a clinical record.
    Real application · Synthetic data · Read-only observation. Open image at full size ↗

03 / Engineering decisions

Two boundaries worth examining.

These stories explain choices visible in inspected source and the tradeoffs they expose. My contribution is product and system-design direction with AI-assisted implementation. They do not imply I personally wrote every implementation detail or that these behaviors were exercised in the captured journey.

Separate system and organization database access

Problem: System-level responsibilities and organization-specific data need distinct access boundaries.

Implemented approach: The source separates system-database access from organization-database access. Organization connections are cached by connection identity, with configurable cache and pool limits. The system factory checks configured database identity against the constructed client options.

Tradeoff: Connection reuse comes with connection-identity and cache-lifecycle responsibilities, including expiry and size-based eviction. Separate access paths express the design; they do not prove runtime isolation.

Evidence and limit: Static source inspection supports these mechanisms. My stated design direction prioritizes per-organization runtimes and dedicated databases, but no isolation, resource-use or security test is established here.

Validate appointment inputs at the server boundary

Problem: Appointment input includes time ordering and clinical context that static request types alone cannot establish at runtime.

Implemented approach: Appointment creation uses a shared Zod payload schema in the server handler and OpenAPI declaration. The client mutation calls a generated appointment service. The server parses the payload before calling its service and has an HTTP 400 branch for schema errors.

Tradeoff: Generated request types and runtime validation coexist. The generated payload allows nullable date strings, while server refinement requires a valid, ordered interval. Shared declarations alone do not establish validation parity or generation freshness.

Evidence and limit: Producer/consumer source inspection supports this boundary, including date coercion and clinical patient/professional checks. No appointment request, persistence result or error response was exercised for this story.

04 / Architecture

A logical view of the access boundaries.

BrowserReact + TypeScriptGenerated appointment service
ServerExpress APIAppointment payload validation before service calls
System access → PostgreSQLSystem schema / database client
Organization access → PostgreSQLOrganization schema / connection cache
The browser calls the server API. The source defines separate system and organization database-access mechanisms. Branches represent logical access responsibilities, not a traced appointment query, deployed topology or proven tenant isolation.

05 / Quality, outcomes & current limits

What the evidence establishes.

The demonstrated result is a repeatable read-only review of a synthetic patient across three views, including an existing attendance/appointment relationship. The two engineering stories establish source-level mechanisms and visible tradeoffs. No measured business impact is claimed.

A central distinction is between design intent, inspected implementation and observed behavior. Keeping those separate makes the product review useful without overstating what a screenshot or a shared type can prove.

Evidence scope

Technical stories use source revision 9da4fbd. Captures use a later application revision, 89b558b, in a dedicated synthetic environment on 28 October 2026. Runtime observations from that later build do not verify the earlier source baseline or either engineering story.

Still unestablished here

Clinical writes, appointment creation, end-to-end treatment workflows, runtime organization isolation and full deployment qualification remain outside this evidence set. The captures also do not establish production readiness. The complete static narrative remains available independently of the clinical application.

06 / Continue the conversation

Have a role or a workflow in mind?

I welcome engineering and product-team conversations, and client discussions about workflow modeling, solutions and implementation, or legacy modernization.

Return to Felipe’s homepage →