- ASP.NET Core 9 Razor Pages + Minimal API hybrid - 14 validators (CPF, CEP, CNPJ, email, phone, name, yes-no, birthdate, handoff, cancel-intent, company-name, plate-br, postal-code, validate_reply) - OAuth login (Google, Microsoft, GitHub) + cookie auth - MongoDB usage tracking + CEP cache collection - Stripe checkout with inline PriceData (no Price IDs) - MCP server for Claude Code / Cursor integration - Playground (10 calls/IP/day, no auth) - Docs: Quickstart, API Reference, N8N, MCP, Créditos, Erros, Fluxos - Credit system: 3 cr standard validators, 5 cr validate_reply - SmartSuggestion: contextual re-ask via IA when obtained=false - Per-IP rate limiting + daily cap + shared-IP abuse detection - Lightbox for comic images - Validadores page split: Brasileiros / Universais + Em breve Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4.3 KiB
4.3 KiB
NALU AI — Site Brief
Reference doc for context after compaction. Last updated: 2026-05-09. Comics/quadrinhos sections: placeholders only — user generates images in Gemini separately. APIs: ALL 12 validators already implemented and functional in the backend.
Stack
- Razor Pages + TailwindCSS + HTMX (inside same ASP.NET Core 9 project)
- Stripe (analyze qrrapido for patterns — price_data dynamic, idempotency keys)
- Database: TBD (confirm schema before implementing)
- MCP: Streamable HTTP primary + SSE fallback
Pages
/ Landing (one-page, all sections)
/playground Public test, no auth, 50 calls/IP/day
/docs Docs hub
/docs/quickstart
/docs/api-reference
/docs/mcp
/docs/state-machine State machine concept + Mermaid diagrams
/validadores Grid of 12 validators
/validadores/{id} Individual validator page
/casos Use case hub (SEO)
/casos/extrator-de-nome
/casos/parcelas-48x
/casos/cep-via-conversa
/casos/cpf-em-chatbot
/precos Plans + Stripe checkout
/login
/painel Dashboard + keys + plan + invoices
/sobre
Identity / Branding
- Name: NALU AI — NAtural Language Understanding
- Color rule: NA (Natural) = light color, LU = dark color, same across logo + subtitle
- Font: Inter or Plus Jakarta Sans (Google Fonts)
- Minimal, developer-friendly, white background
- Icons: Lucide (line icons)
Landing sections (in order)
- Hero — tagline "Seu chatbot está gravando 'Bom Dia' como nome do cliente"
- Before/after demo (3 examples: name, parcelas 48x, CEP errado)
- How it works (3 steps)
- [COMIC PLACEHOLDER 1] —
<img src="/images/comic-1-pt.webp"> - Validator catalog grid (Universal 7 + Brasil 5)
- State machine section — how validators chain into flows
- [COMIC PLACEHOLDER 2] —
<img src="/images/comic-2-pt.webp"> - Code snippets (tabs: cURL | JS | C# | Python | n8n)
- Pricing summary (3 cols)
- FAQ (5 questions)
- [COMIC PLACEHOLDER 3 — optional] —
<img src="/images/comic-3-pt.webp"> - Final CTA + footer
Plans / Pricing
| Plan | Price | Requests/month |
|---|---|---|
| Free | R$ 0 | 2.000 (100/day rolling) |
| Indie | R$ 49/mês | 25.000 |
| Pro | R$ 149/mês | 100.000 |
| Enterprise | Consulta | 500k+ |
Playground
- Endpoint:
POST /v1/playground/extract/{validator}(no auth, rate limit by IP) - Rate limit: 50 calls/IP/day — on exceed: prompt to sign up
- Shows side-by-side: "bot tradicional" vs "NALU AI"
- Dropdown with all validators + pre-loaded examples from
.mdfiles - "Ver código" button shows cURL/JS/C# equivalent
Stripe (CRITICAL — replicate qrrapido patterns)
price_datadynamic — NO hardcodedprice_id- Idempotency keys on all mutations
- Webhooks with idempotence table (
webhook_eventswithevent_idPK) - Mandatory events: checkout.session.completed, subscription.updated, subscription.deleted, invoice.payment_failed
- Validate
Stripe-Signatureheader on every webhook
API Keys
- Prefix:
nalu_+ hash - Show full key ONCE after creation only
- Store HASH only (not plaintext)
- Allow multiple keys per account
- Soft-delete for revocation (keep for audit)
- Rate limit tied to PLAN, not to individual key
MCP / Smithery
- Analyze qrrapido for ALL adjustments made for Smithery compatibility
- Transport: Streamable HTTP (
POST /mcp) primary, SSE fallback (GET /sse) - Header required:
MCP-Protocol-Version: 2025-11-25 smithery.yamlwith API key config schema- CORS: allow Smithery origin + MCP client origins
Database schema (to confirm before implementing)
Tables needed:
users(id, email, plan, stripe_customer_id, created_at)api_keys(id, user_id, key_hash, prefix, name, revoked_at, created_at)usage(id, api_key_id, date, count)webhook_events(event_id PK, event_type, processed_at)
SEO pages (/casos)
Template per page:
- H1: "Como [resolver X] em chatbots"
- Intro: real problem story
- "O bug em ação" — dialogue diagram
- "Como NALU resolve" — API response
- Code tabs
- CTA → playground
Priority order
Landing → Playground → Precos+Stripe → Painel → Docs → Casos
DO NOT implement now (V2+)
- Detailed call logs
- Custom validators
- Advanced analytics
- Team management
- Comic images (user generates externally)