Ļöçàļ Đéṽéļöþḿéñţ
À ƒüļļ bowrain îñšţàñçé îš à ƒéŵ çööþéŕàţîñĝ þŕöçéššéš: ţĥé šéŕṽéŕ (ŔÉŠŢ + ĝŔÞÇ ÀÞÎ; àļšö đŕîṽéš ţĥé kapi ļööþ'š ŕüñš), àñ àšýñç ŵöŕķéŕ (þŕöçéššéš ţĥé đŕàƒţîñĝ ĵöƃš ţĥöšé ŕüñš éñǫüéüé, àñđ þüšĥ îñĝéšţîöñ), àñđ ƃàçķîñĝ šéŕṽîçéš: ÞöšţĝŕéŠǪĻ, ÉļàšţîçḾǪ (ŠǪŠ-çöḿþàţîƃļé ĵöƃ ǫüéüé), Ŕéđîš (éṽéñţ ƃüš), ḾîñÎÖ (ƃļöƃ šţöŕàĝé), Ķéýçļöàķ (ÖÎĐÇ), àñđ Ḿàîļþîţ (ŠḾŢÞ). Ţĥé šéŕṽéŕ àñđ ŵöŕķéŕ šĥàŕé ţĥé ĵöƃ ǫüéüé àñđ ţĥé ƃļöƃ šţöŕé; þüšĥ þŕöçéššîñĝ îš àšýñçĥŕöñöüš.
Ţĥéŕé àŕé ţĥŕéé ŵàýš ţö ŕüñ ţĥîš ļöçàļļý, đéþéñđîñĝ öñ ŵĥàţ ýöü àŕé ŵöŕķîñĝ öñ:
| Ḿöđé | Ŵĥàţ ŕüñš ŵĥéŕé | Éñţŕý þöîñţ | Çöḿḿàñđ |
|---|---|---|---|
| À · Ĥöšţ + ĤḾŔ | đéþš + Ţŕàéƒîķ îñ Đöçķéŕ; šéŕṽéŕ + ŵéƃ öñ ţĥé ĥöšţ (ĥöţ ŕéļöàđ) | https://bowrain.mymac | docker compose up + make dev-server/dev-web |
| Ƃ · Ƒüļļ Đöçķéŕ (šĥàŕéđ) | šéŕṽéŕ + ŵöŕķéŕ + ŵéƃ îñ Đöçķéŕ, ŕéüšîñĝ ḿöđé À'š đéþš + Ţŕàéƒîķ | https://bowrain.mymac | make stack-up-shared |
| Ƃ · Ƒüļļ Đöçķéŕ (šţàñđàļöñé) | éṽéŕýţĥîñĝ îñ Đöçķéŕ, þļàîñ ĤŢŢÞ, šéļƒ-çöñţàîñéđ, ñö ĥöšţ šéţüþ | http://localhost:8080 | make stack-up |
Ḿöđéš À àñđ ţĥé šĥàŕéđ ƒüļļ-Đöçķéŕ ḿöđé àŕé ţĥé šàḿé Çöḿþöšé þŕöĵéçţ àñđ
ţĥéŕéƒöŕé šĥàŕé öñé Ţŕàéƒîķ; ţĥéŕé îš ñö :80/:443 çļàšĥ. Ýöü ḿöṽé ƃéţŵééñ à
ĥöšţ-ŕüñ šéŕṽéŕ (ƒöŕ ĥöţ ŕéļöàđ) àñđ à çöñţàîñéŕîžéđ öñé ƃý àđđîñĝ öŕ ŕéḿöṽîñĝ ţĥé
àþþ öṽéŕļàý; ţĥé çöñţàîñéŕ'š ŕöüţéŕ öüţ-þŕîöŕîţîžéš ţĥé ĥöšţ ƒîļé-ŕöüţéš ŵĥîļé îţ
îš üþ, àñđ ţĥé šàḿé Ţŕàéƒîķ ƒàļļš ƃàçķ ţö ţĥé ĥöšţ šéŕṽéŕ ŵĥéñ îţ îš ĝöñé. Ţĥé
šţàñđàļöñé ḿöđé îš à šéþàŕàţé, šéļƒ-çöñţàîñéđ þŕöĵéçţ (îţš öŵñ đéþš, ñö Ţŕàéƒîķ)
ƒöŕ ÇÎ àñđ ǫüîçķ šţàŕţš.
Ƒöŕ ŕüññîñĝ à þŕöđüçţîöñ îñšţàñçé, šéé Šéļƒ-Ĥöšţîñĝ
îñšţéàđ. Àļļ çöḿḿàñđš ƃéļöŵ ŕüñ ƒŕöḿ ţĥé bowrain/ đîŕéçţöŕý.
Þŕéŕéǫüîšîţéš
-
Đöçķéŕ (ŵîţĥ Çöḿþöšé ṽ2) àñđ Ĝö.
-
Ţĥé
kapi-bowrainþļüĝîñ, ţö đŕîṽé à þŕöĵéçţ ŵîţĥ ţĥékapiÇĻÎ:brew install neokapi/tap/bowrain-cli. -
Ƒöŕ ţĥé
*.bowrain.mymac(ŢĻŠ) ḿöđéš öñļý, ţĥé öñé-ţîḿé ĥöšţ šéţüþ: ļöçàļ ĐÑŠ ƒöŕ*.mymacàñđ à ļöçàļļý-ţŕüšţéđ çéŕţîƒîçàţé:brew install dnsmasq mkcertecho 'address=/.mymac/127.0.0.1' >> "$(brew --prefix)/etc/dnsmasq.conf"sudo brew services restart dnsmasqsudo mkdir -p /etc/resolver && echo 'nameserver 127.0.0.1' | sudo tee /etc/resolver/mymacmkcert -install && make certsŢĥé šţàñđàļöñé ḿöđé ñééđš ñöñé öƒ ţĥîš.
Ḿöđé À: ĥöšţ šéŕṽéŕ + ŵéƃ (ĥöţ ŕéļöàđ)
Ƃàçķîñĝ šéŕṽîçéš àñđ ţĥé šĥàŕéđ Ţŕàéƒîķ ŕüñ îñ Đöçķéŕ; ţĥé šéŕṽéŕ àñđ Ṽîţé đéṽ
šéŕṽéŕ ŕüñ öñ ţĥé ĥöšţ šö çĥàñĝéš ŕéļöàđ îḿḿéđîàţéļý. Ţŕàéƒîķ ŕöüţéš
bowrain.mymac ţö ţĥé ĥöšţ'š :8080 (ÀÞÎ) àñđ :5173 (ŵéƃ).
docker compose up -d --wait # deps + Traefik (auto-loads compose.override.yaml)
make dev-server # bowrain-server on host :8080
make dev-web # Vite HMR for apps/web on :5173
make dev-worker # optional: the worker, for push → draft → pull
| Šéŕṽîçé | ÜŔĻ |
|---|---|
| Ŵéƃ + ÀÞÎ | https://bowrain.mymac |
| Ķéýçļöàķ | https://auth.bowrain.mymac (àđḿîñ/àđḿîñ) |
| Ḿàîļþîţ | https://mail.bowrain.mymac |
Ḿöđé Ƃ (šĥàŕéđ): ƒüļļ šţàçķ ƃéĥîñđ ţĥé šàḿé Ţŕàéƒîķ
Àđđš ţĥé šéŕṽéŕ, ŵöŕķéŕ, àñđ ŵéƃ çöñţàîñéŕš ţö ḿöđé À'š đéþš + Ţŕàéƒîķ
þŕöĵéçţ (compose.app.yaml),
ŕéàçĥàƃļé àţ ţĥé šàḿé https://bowrain.mymac. Ñö šéçöñđ þŕöẋý.
cp .env.example .env # optional: configure a real AI provider
make stack-up-shared # = docker compose -f compose.yaml -f compose.override.yaml -f compose.app.yaml up
Ƃéçàüšé ţĥîš îš ţĥé šàḿé þŕöĵéçţ àš ḿöđé À, ýöü çàñ ļéàṽé ţĥé đéþš + Ţŕàéƒîķ
ŕüññîñĝ àñđ àđđ öŕ đŕöþ ţĥé àþþ öṽéŕļàý ţö šŵîţçĥ ƃéţŵééñ à ĥöšţ-ŕüñ àñđ à
çöñţàîñéŕîžéđ šéŕṽéŕ. make stack-shared-down ţéàŕš îţ đöŵñ.
Ḿöđé Ƃ (šţàñđàļöñé): žéŕö-šéţüþ šéļƒ-çöñţàîñéđ šţàçķ
Éṽéŕýţĥîñĝ, îñçļüđîñĝ îţš öŵñ ƃàçķîñĝ šéŕṽîçéš, ƃüîļţ ƒŕöḿ šöüŕçé öñ þļàîñ-ĤŢŢÞ
localhost (compose.full.yaml).
Ñö *.mymac/ŢĻŠ ĥöšţ šéţüþ; ƃéšţ ƒöŕ ÇÎ àñđ ǫüîçķ šţàŕţš.
make stack-up # server + worker + deps on http://localhost:8080
make stack-up-web # …also build and serve the SaaS web UI at http://localhost:8080/
Ķéýçļöàķ îš öñ http://localhost:8180 (àđḿîñ/àđḿîñ) àñđ Ḿàîļþîţ öñ
http://localhost:8025. Üšéƒüļ ţàŕĝéţš: make stack-ps, stack-logs,
stack-down.
Ţĥé ŵöŕķéŕ
Ţĥé bowrain-worker þŕöçéššéš ţĥé đŕàƒţîñĝ ĵöƃš ţĥàţ ļööþ ŕüñš éñǫüéüé (à þüšĥ
ţö àñ on-push þŕöĵéçţ šţàŕţš öñé). Îţš üþšţŕéàḿ þŕöṽîđéŕ ƒöŕ ţĥéšé þļàţƒöŕḿ
ĵöƃš îš çöñƒîĝüŕéđ ƃý éñṽîŕöñḿéñţ:
BOWRAIN_PLATFORM_PROVIDER:demo(đéƒàüļţ),bedrock,gemini,openai,anthropic, öŕollama.- Ţĥé ÀÞÎ ķéý çöḿéš ƒŕöḿ
BOWRAIN_PLATFORM_API_KEYöŕ à þŕöṽîđéŕ-šþéçîƒîç ṽàŕîàƃļé (GEMINI_API_KEY,OPENAI_API_KEY,ANTHROPIC_API_KEY); Ƃéđŕöçķ üšéš ţĥé ÀŴŠ çŕéđéñţîàļ çĥàîñ àñđAWS_REGION. BOWRAIN_PLATFORM_MODELšéţš ţĥé đéƒàüļţ ḿöđéļ.
Ţĥé đéƒàüļţ demo þŕöṽîđéŕ îš àñ öƒƒļîñé, đéţéŕḿîñîšţîç šţüƃ, šö ţĥé ƒüļļ
þîþéļîñé ŵöŕķš öüţ öƒ ţĥé ƃöẋ ŵîţĥ ñö ķéý. Šéţ à ŕéàļ þŕöṽîđéŕ îñ .env (šéé
.env.example)
ƒöŕ ŕéàļ đŕàƒţš, ƒöŕ éẋàḿþļé:
BOWRAIN_PLATFORM_PROVIDER=gemini
BOWRAIN_PLATFORM_MODEL=gemini-3.5-flash
GEMINI_API_KEY=AIza...
Đŕîṽîñĝ îţ ŵîţĥ ţĥé kapi þļüĝîñ
Þöîñţ --server àţ ŵĥîçĥéṽéŕ éñţŕý þöîñţ ýöüŕ ḿöđé éẋþöšéš (http://localhost:8080
ƒöŕ šţàñđàļöñé, https://bowrain.mymac ƒöŕ ţĥé ŢĻŠ ḿöđéš):
mkdir myapp && cd myapp
kapi init --server http://localhost:8080 --anonymous --source en --targets fr,de
echo '{"greeting":"Hello"}' > en.json
kapi add en.json
kapi up # catch fr,de up on the server: push → catch up → pull
cat fr.json # the drafted catalog
kapi init šçàƒƒöļđš ţĥé þŕöĵéçţ; ŵĥéñ --server îš ĝîṽéñ, ţĥé bowrain þļüĝîñ
çöñţŕîƃüţéš ţĥé šéŕṽéŕ çöññéçţîöñ: îţ ŵŕîţéš ţĥé bowrain: ƃļöçķ àñđ šţöŕéš à
çļàîḿ ţöķéñ (--anonymous), öŕ çŕéàţéš ţĥé þŕöĵéçţ üñđéŕ ýöüŕ àççöüñţ ŵĥéñ ýöü
àŕé šîĝñéđ îñ (kapi auth login), öŕ àţţàçĥéš ţö àñ éẋîšţîñĝ öñé ŵîţĥ
--project <id>. Îţ îš îđéḿþöţéñţ: ŕüññîñĝ kapi init --server … îñšîđé àñ
éẋîšţîñĝ ļöçàļ kapi þŕöĵéçţ çöññéçţš îţ ţö bowrain, àñđ ļéàṽéš àñ
àļŕéàđý-çöññéçţéđ þŕöĵéçţ üñţöüçĥéđ.
Ţĥé çüšţöḿ Ķéýçļöàķ ļöĝîñ ţĥéḿé îš öþţîöñàļ; ļöĝîñ ŕéñđéŕš ŵîţĥ ţĥé đéƒàüļţ
ţĥéḿé üñţîļ ýöü ƃüîļđ îţ ŵîţĥ make keycloak-theme. Ƒöŕ ţĥé ñö-àüţĥ þàţĥ àƃöṽé
(--anonymous), ñö Ķéýçļöàķ ļöĝîñ îš îñṽöļṽéđ àţ àļļ.