CtrlK
BlogDocsLog inGet started
Tessl Logo

mobile-app-structure

Feature-folder layout, states/ convention, and data-flow rules for the Agenta mobile app (web/mobile). Use when creating or moving files under web/mobile, deciding where a component lives, adding a new feature or screen, or wiring data into mobile components.

77

Quality

96%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Mobile app structure

The source of truth for how code is organized in web/mobile. Load it before creating any file there.

Layout

web/mobile/
  src/
    pages/                    # Pages Router route shells ONLY — no logic, no layout JSX
    features/
      <feature>/              # e.g. sessions/, chat/, auth/, project-drawer/
        <Component>.tsx       # one component per file, named export = file name
        states/               # designed states for this feature
          <X>Skeleton.tsx     # mirrors the final layout geometry (no shift on swap)
          <X>Empty.tsx        # designed empty state with a call to action
          <X>Error.tsx        # error + retry affordance; preserves user input
    components/ui/            # shadcn registry components (see mobile-shadcn-conventions)
    lib/                      # cn util, motion presets, api glue, context resolution
    styles/                   # globals.css, theme.generated.css (generated)
  scripts/                    # generate-shadcn-tokens.ts (token bridge)

Rules

  • Pages are thin shells. A page file resolves route params and renders one feature screen component. Anything else belongs in features/.
  • One component per file. No secondary exported components; small private helpers inside a file are fine if they never leave it.
  • Every data-bearing component has designed states. Before writing the happy path, create the states/ siblings (skeleton, empty, error). A screen is not done if any of its states is a browser default or an unstyled string.
  • Data flow: components get data via hooks from @agenta/* packages (@agenta/entities, @agenta/shared, later @agenta/chat) or thin fetchers in lib/. NEVER import @/oss/*, @agenta/oss, @agenta/ee — the mobile app has zero app-layer imports (lint enforces this).
  • No provider fleet. _app.tsx stays minimal; add a provider only when a concrete feature needs it, scoped as narrowly as possible.

Adding a new feature (checklist)

  1. Create src/features/<feature>/ with the screen component.
  2. Create states/ siblings for every data-bearing component.
  3. Add the route shell in src/pages/ that renders the screen.
  4. Use useMotionPresets() for any transitions (see mobile-motion-patterns).
  5. pnpm --filter @agenta/mobile lint && pnpm --filter @agenta/mobile types:check.
Repository
Agenta-AI/agenta
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.