Prompty dla builderów AI
Builder napisze kod szybciej niż Ty. Czego nie wie, to dwóch rzeczy o konkretnym API: gdzie położyć klucz i dlaczego żądanie z przeglądarki nie przechodzi. Obie kosztują godziny debugowania i obie usuwa jeden akapit w prompcie.
Poniżej najpierw ten akapit, potem siedem przepisów.
Reguła, którą trzeba wkleić przed każdym przepisem
Dział zatytułowany „Reguła, którą trzeba wkleić przed każdym przepisem”Skopiuj ten blok do buildera przed tekstem przepisu. Nie chodzi w nim o styl kodu, tylko o to, co inaczej nie zadziała.
AstroWay API house rules. Apply these to every request you generate.
1. The API key is a server secret. Never put aw_live_* or aw_test_* into client code, into a VITE_* or NEXT_PUBLIC_* variable, or into a fetch that runs in the browser. Create a server route and call the API from there.2. The browser cannot call https://api.astroway.info/v1/* with that key. The one exception is a publishable pk_live_* key created for your app's origin: responses to that origin carry access-control-allow-origin, and the key works only from origins on its own list. Two prefixes answer any browser with no key: /v1/public/* returns JSON you can use, and /v1/embed/* returns a finished HTML page meant for an iframe, not for fetch.3. The auth header is exactly "X-Api-Key: <key>". Authorization: Bearer is rejected with 401, and so is an api_key query parameter.4. Send the birth time zone as an IANA name: "timezone": "Europe/Kyiv". Do not compute a UTC offset yourself. Kyiv in May 1990 was UTC+4, not the +3 it is today, and a wrong offset moves every house cusp.5. Every response is {"ok": true, "data": {...}} or {"ok": false, "error": {"code": "...", "message": "..."}}. Read data on success and show error.message to the user on failure. Do not assume a bare object.6. Planet positions arrive as ecliptic longitude in degrees, with no sign name. Derive it: SIGNS[Math.floor(longitude / 30)] where SIGNS runs Aries, Taurus, Gemini, Cancer, Leo, Virgo, Libra, Scorpio, Sagittarius, Capricorn, Aquarius, Pisces. Degrees inside the sign are longitude % 30.7. Responses carry X-Credits-Used and X-Credits-Remaining. Log both on the server so the cost of a feature is visible before the bill is.8. Ask for the fields you will render. Every endpoint takes ?fields= as a comma-separated list of dotted paths and ?precision= as decimal places: POST /v1/chart?fields=planets.name,planets.longitude,houses.cusp&precision=2 answers in 559 bytes where the full response is 32,410. Same credits, and the tokens are yours to pay either way.9. Get a free key at https://api.astroway.info/dashboard/sign-up and use an aw_test_* sandbox key while building: it spends no credits.1. Horoskop urodzeniowy z kołem
Dział zatytułowany „1. Horoskop urodzeniowy z kołem”Dwie odpowiedzi na jedną akcję użytkownika: dane horoskopu i gotowy SVG.
| Endpoint | Kredytów |
|---|---|
/v1/chart | 20 |
/v1/render/wheel-western | 10 |
Build a single-page app: a birth data form (date, time, city with latitude andlongitude, IANA time zone) that renders a natal chart.
Server route POST /api/chart does two calls to AstroWay, in parallel: POST https://api.astroway.info/v1/chart POST https://api.astroway.info/v1/render/wheel-westernBoth take the same body: { "date": "1990-05-15", "time": "14:30:00", "timezone": "Europe/Kyiv", "latitude": 50.45, "longitude": 30.52 }Both need the X-Api-Key header.
/v1/chart returns data.planets (array with name, longitude, isRetrograde),data.houses.cusps (array of 12 longitudes) and data.aspects (array withplanet1, planet2 and a type object carrying name, symbol and color)./v1/render/wheel-western returns data.svg as a string.
The page shows the SVG at the top, then a table of planets with sign anddegree derived from longitude, then the aspect list using type.symbol andtype.color. Mark retrograde planets with an R.
Do not call AstroWay from the browser. The page calls /api/chart only.Sprawdź po wygenerowaniu: SVG jest wstawiony jako markup, a nie w <img src>; czas wysłano jako ciąg HH:mm:ss; klucz nie trafił do bundla (wyszukiwanie aw_ w zbudowanych plikach nie powinno niczego znaleźć).
2. Zgodność dwóch horoskopów
Dział zatytułowany „2. Zgodność dwóch horoskopów”Jedna liczba i jej składowe, bez tekstu objaśniającego. /v1/synastry/attraction-score, 50 kredytów za parę.
Build a compatibility page: two birth-data forms side by side, one button.
Server route POST /api/compat calls POST https://api.astroway.info/v1/synastry/attraction-scorewith body { "chart1": {...}, "chart2": {...} }, where each chart is { "date", "time", "timezone", "latitude", "longitude" }.
The response has data.score (a number), data.components (the parts that madeit) and data.notes. Render score as a large number with a progress ring, thencomponents as labelled bars, then notes as a list.
Never show the score without the components: a single number with no reasonbehind it is the thing users distrust.3. Horoskop dzienny, w ogóle bez klucza
Dział zatytułowany „3. Horoskop dzienny, w ogóle bez klucza”Jedyny przepis, w którym trasa serwerowa nie jest potrzebna: ten endpoint odpowiada przeglądarce i nie kosztuje kredytów.
Add a daily horoscope block to the page. Call this directly from the browser,no key and no server route needed:
GET https://api.astroway.info/v1/public/horoscope/daily?sign=leo&lang=en
Response: data.sign, data.date, data.period, data.horoscope (the text),data.disclaimer and data.language. Render a sign picker with the twelve signs,remember the choice in localStorage, and always show data.disclaimer under thetext.
The first request for a date that has not been generated yet can take a while,so show a skeleton, not a spinner that looks stuck.4. Human Design
Dział zatytułowany „4. Human Design”Typ, strategia, autorytet, profil, centra i kanały jednym wywołaniem /v1/human-design, 50 kredytów.
Build a Human Design page: birth data form, then the chart summary.
Server route POST /api/hd calls POST https://api.astroway.info/v1/human-designwith { "date", "time", "timezone", "latitude", "longitude" }.
The response has data.type, data.strategy, data.notSelfTheme, data.authority,data.profile, data.definition, data.cross, data.centers, and the activationarrays data.personalityActivations and data.designActivations.
Lay it out as: type and strategy as the headline, authority and profile as twocards, centers as a list with defined ones filled and undefined ones outlined,activations in a collapsible table. Birth time matters here more than anywhereelse, so refuse to submit without it and say why.5. Raport PDF pod marką użytkownika
Dział zatytułowany „5. Raport PDF pod marką użytkownika”Dla tych, którzy sprzedają raporty, a nie pokazują ekrany. /v1/reports/natal, 5000 kredytów za dokument, a link żyje 24 godziny.
Build a report generator: birth data form plus a branding form (company name,report title, accent colour), and a Generate button.
Server route POST /api/report calls POST https://api.astroway.info/v1/reports/natalwith { "chart": { "date", "time", "timezone", "latitude", "longitude" }, "whitelabel": { "companyName": "...", "reportName": "...", "themeColor": "#7c3aed", "footerText": "..." } }
The response has data.url, data.page_count, data.byte_length anddata.expires_at. The URL is valid for 24 hours only, so the server mustdownload the PDF immediately and store it on your side, then hand the useryour own link. Never give the AstroWay URL to the end user.
Show page_count and a download button. One report costs 5000 credits: put aconfirmation step before the call, not after.Pełny katalog szesnastu raportów, co jest w każdym i ile ma stron: Reports API.
6. Kalendarz tranzytów na miesiąc
Dział zatytułowany „6. Kalendarz tranzytów na miesiąc”Lista zdarzeń w oknie dat, z której powstaje zarówno oś czasu, jak i kalendarz. /v1/transit-calendar, 100 kredytów za okno.
Build a month view of transits.
Server route POST /api/transits calls POST https://api.astroway.info/v1/transit-calendarwith { "natal": { "date", "time", "timezone", "latitude", "longitude" }, "startDate": "2026-10-01", "endDate": "2026-10-31" }
The response has data.count and data.events, plus the echoed startDate,endDate and maxOrb. Render events on a month grid, one dot per day withevents, and a day panel listing that day's events.
One call covers the whole window, so fetch the month once and filter in theclient. Do not call the API per day: that is thirty-one calls and thirty-onetimes the credits for the same answer.7. Rozkład tarota
Dział zatytułowany „7. Rozkład tarota”Najtańszy sposób, by dodać codzienną interakcję. /v1/tarot/rider-waite/draw/three-card, 10 kredytów za rozkład albo zero dla karty dnia.
Add a three-card tarot spread.
Server route POST /api/tarot calls POST https://api.astroway.info/v1/tarot/rider-waite/draw/three-cardwith an optional { "seed": 7 }. The response has data.spread, data.seed anddata.drawn.
Pass a seed derived from the user id and today's date, so the same person getsthe same spread all day and a new one tomorrow. Without a seed every reloaddeals a new hand, which reads as a slot machine.
For a zero-cost daily card the browser can call GET https://api.astroway.info/v1/public/tarot/dailydirectly, no key.Osiem builderów, jedna różnica
Dział zatytułowany „Osiem builderów, jedna różnica”Przepisy wyżej są takie same dla wszystkich. Różnica jest tylko w tym, gdzie żyje trasa serwerowa i gdzie położyć klucz.
| Builder | Gdzie żyje wywołanie serwerowe | Gdzie położyć klucz |
|---|---|---|
| Lovable | edge function w Supabase | Secrets projektu Supabase |
| Bolt | server function | panel Secrets w Bolt |
| v0 | route handler Next.js na Vercel Functions | zmienna środowiskowa w Vercel, typu Secret |
| Replit | zwykły proces serwerowy | Replit Secrets, i osobno jeszcze raz w Deployments |
| Cursor, Claude Code, Devin Desktop, Copilot | ten, który jest w Twoim stacku | .env poza gitem plus magazyn sekretów Twojego hostingu |
Cztery osobne pułapki, każda kosztuje wieczór.
- Lovable i Bolt budują frontend przez Vite, a Vite oddaje przeglądarce każdą zmienną z prefiksem
VITE_. Klucza nie kładzie się tam nawet tymczasowo: trafi do bundla, który jest rozdawany wszystkim. - Bolt pokazuje podgląd wewnątrz WebContainer, a to prawdziwa przeglądarka z prawdziwym CORS, którego nie da się tam wyłączyć. Funkcja serwerowa nie jest tu “lepsza”, tylko jedynym sposobem, żeby wywołanie w ogóle się odbyło.
- v0 wszywa
NEXT_PUBLIC_*do bundla na etapie budowania. Zmiana wartości w panelu to za mało: dopóki nie ma nowego deployu, aplikacja działa ze starym kluczem. Rotacja klucza to rotacja plus przebudowanie. - Replit trzyma sekrety przestrzeni roboczej i sekrety Deployments osobno. To, co działało w edytorze, po publikacji pada z pustym kluczem, dopóki nie dodasz go jeszcze raz w panelu Deployments.
Cztery ostatnie wiersze tabeli to nie platformy, tylko agenci w Twoim repozytorium, i każdy ma własną sieciową listę dozwolonych dla swojej piaskownicy. Gdy agent zechce sprawdzić właśnie napisany kod, wywołanie do api.astroway.info może zostać zablokowane, dopóki domena nie zostanie dodana. Dla nich jest też krótsza droga: podłącz nasz MCP, a agent wywoła API sam, bez Twojego kodu. Instrukcje w Konfiguracji agenta.
Jeśli Twój agent mówi function calling, a nie MCP
Dział zatytułowany „Jeśli Twój agent mówi function calling, a nie MCP”Weź gotowe definicje narzędzi i przekaż je modelowi bezpośrednio. Są generowane z dokumentu OpenAPI, więc schemat, który wypełnia model, to ten sam, który waliduje endpoint.
curl "https://api.astroway.info/v1/agent/tools?format=openai&select=starter" \-H "X-Api-Key: aw_live_YOUR_KEY"format przyjmuje openai i anthropic, select zawęża katalog do zestawu startowego zamiast wszystkich narzędzi.