> ## Documentation Index
> Fetch the complete documentation index at: https://hyperlocalise.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# First project

> Set up a minimal project layout and understand expected output files.

## Minimal layout

<Tree>
  <Tree.Folder name="apps" defaultOpen>
    <Tree.Folder name="web" defaultOpen>
      <Tree.Folder name="lang" defaultOpen>
        <Tree.File name="es-ES.json" />
      </Tree.Folder>
    </Tree.Folder>

    <Tree.Folder name="lab" />
  </Tree.Folder>

  <Tree.Folder name="packages" defaultOpen>
    <Tree.Folder name="ui" defaultOpen>
      <Tree.Folder name="lang" defaultOpen>
        <Tree.File name="en-US.json" />
      </Tree.Folder>
    </Tree.Folder>
  </Tree.Folder>

  <Tree.File name="i18n.yml" />
</Tree>

## Minimal config pattern

Use one bucket to start:

* `locales.source`: your source locale (for example `en-US`)
* `locales.targets`: one target locale (for example `es-ES`)
* `buckets.ui.files`: map source path template to target path template
* `llm.profiles.default`: choose your provider and model

For full fields, see [i18n config](/configuration/i18n-config).

In this setup, translations are sourced from `packages/ui/lang` and generated into `apps/web/lang`. If you omit `groups`, Hyperlocalise automatically runs every configured bucket for every target locale.

## Generated artifacts

After `hyperlocalise run`:

* translated target files under your configured `to` paths
* `.hyperlocalise.lock.json` in project root
* sidecar metadata files for provenance, depending on your store layout
