Skip to content

adspacheco/kairos.town

Repository files navigation

f# Kairós

Sistema Operacional para a Sociedade

Plataforma genérica que transforma qualquer problema de oferta e demanda em um mercado através de configuração JSON, não código.

Challenge FIAP 2026 - PRIME Society

Conceito Central

A infraestrutura universal para mercados de oferta e demanda.

O core é genérico. O comportamento de cada mercado é definido por JSON Schema:

┌─────────────────────────────────────────────────────────────┐
│                       KAIRÓS CORE                           │
│                                                             │
│   apps + offers + demands + matches + contracts + reviews   │
│   (genérico, configurado por JSON Schema)                   │
└───────────────────────────┬─────────────────────────────────┘
                            │
            ┌───────────────┼───────────────┐
            ▼               ▼               ▼
       ┌─────────┐     ┌─────────┐     ┌─────────┐
       │  Gigs   │     │ Doações │     │   Ecom  │
       │ (JSON)  │     │ (JSON)  │     │  (JSON) │
       └─────────┘     └─────────┘     └─────────┘

       Mesmo código, diferentes schemas

Quick Start

npm install
npm run dev

Stack

Camada Tech
Frontend Next.js 16, React 19
Backend Next.js API Routes
Banco PostgreSQL 16 (JSONB)
Auth Sessions + bcrypt
Infra Docker Compose

API

Apps

Um App é a definição de um mercado. Ele armazena os JSON Schemas que validam ofertas e demandas, além das regras de matching.

Método Endpoint Descrição Permissão
GET /api/v1/apps Lista todos os apps ativos Público
GET /api/v1/apps/[slug] Busca app pelo slug Público
POST /api/v1/apps Cria novo app create:app
PATCH /api/v1/apps/[slug] Atualiza app update:app

Exemplo: Criar app "gigs"

POST /api/v1/apps
{
  "slug": "gigs",
  "name": "Freelancer Marketplace",
  "description": "Conecta freelancers com clientes",
  "offer_schema": {
    "type": "object",
    "properties": {
      "title": { "type": "string" },
      "skills": { "type": "array", "items": { "type": "string" } },
      "hourly_rate": { "type": "number" }
    },
    "required": ["title", "skills"]
  },
  "demand_schema": {
    "type": "object",
    "properties": {
      "title": { "type": "string" },
      "required_skills": { "type": "array", "items": { "type": "string" } },
      "budget_max": { "type": "number" }
    },
    "required": ["title", "required_skills"]
  },
  "matching_rules": [
    { "offer_field": "skills", "demand_field": "required_skills", "operation": "array_intersects", "weight": 10 },
    { "offer_field": "hourly_rate", "demand_field": "budget_max", "operation": "less_than_or_equal", "weight": 5 }
  ],
  "config": {
    "require_escrow": true
  }
}

Offers

Uma Offer é uma oferta criada por um usuário dentro de um app.

Método Endpoint Descrição Permissão
GET /api/v1/offers Lista ofertas Público
GET /api/v1/offers/[id] Busca oferta por id Público
POST /api/v1/offers Cria oferta create:offer
PATCH /api/v1/offers/[id] Atualiza oferta update:offer
DELETE /api/v1/offers/[id] Remove oferta delete:offer

Filtros disponíveis: ?app_id=, ?user_id=, ?status=

Status possíveis: draft, active, matched, completed, cancelled

Exemplo: Criar oferta

POST /api/v1/offers
{
  "app_id": "uuid-do-app",
  "data": {
    "title": "Desenvolvedor Full Stack",
    "skills": ["react", "node", "typescript"],
    "hourly_rate": 150
  },
  "status": "active"
}

Demands

Uma Demand é uma demanda criada por um usuário dentro de um app.

Método Endpoint Descrição Permissão
GET /api/v1/demands Lista demandas Público
GET /api/v1/demands/[id] Busca demanda por id Público
POST /api/v1/demands Cria demanda create:demand
PATCH /api/v1/demands/[id] Atualiza demanda update:demand
DELETE /api/v1/demands/[id] Remove demanda delete:demand

Filtros disponíveis: ?app_id=, ?user_id=, ?status=

Status possíveis: draft, open, matched, completed, cancelled, expired

Exemplo: Criar demanda

POST /api/v1/demands
{
  "app_id": "uuid-do-app",
  "data": {
    "title": "Preciso de Dev Full Stack",
    "required_skills": ["react", "node", "typescript"],
    "budget_max": 50000
  },
  "status": "open",
  "expires_at": "2025-12-31T23:59:59Z"
}

Users

Método Endpoint Descrição Permissão
POST /api/v1/users Cria usuário Público
GET /api/v1/users/[username] Busca usuário Público
PATCH /api/v1/users/[username] Atualiza usuário update:user
GET /api/v1/user Dados do usuário logado Autenticado

Sessions

Método Endpoint Descrição Permissão
POST /api/v1/sessions Login create:session
DELETE /api/v1/sessions Logout Autenticado

Activations

Método Endpoint Descrição Permissão
PATCH /api/v1/activations/[token] Ativa conta read:activation_token

Testes

npm test                    # Roda todos os testes
npm run test:watch          # Modo watch

Estrutura

kairos/
├── pages/api/v1/           # Endpoints da API
│   ├── apps/               # CRUD de mercados
│   ├── offers/             # CRUD de ofertas
│   ├── demands/            # CRUD de demandas
│   ├── users/              # CRUD de usuários
│   ├── sessions/           # Login/logout
│   └── ...
├── models/                 # Lógica de negócio
│   ├── app.js              # Mercados
│   ├── offer.js            # Ofertas
│   ├── demand.js           # Demandas
│   ├── user.js             # Usuários
│   ├── session.js          # Sessões
│   └── ...
├── infra/                  # Infraestrutura
│   ├── database.js         # Conexão com PostgreSQL
│   ├── controller.js       # Middlewares
│   ├── errors.js           # Classes de erro
│   └── migrations/         # Migrations do banco
├── tests/                  # Testes de integração
└── qa/                     # Arquivos .http para testes manuais

Roadmap

  • Autenticação (users, sessions, activations)
  • Apps (definição de mercados via JSON Schema)
  • Offers (ofertas genéricas)
  • Demands (demandas genéricas)
  • Matching engine
  • Contracts
  • Reviews

Ajustes pendentes

  • Validar offer.data contra app.offer_schema (JSON Schema)
  • Validar demand.data contra app.demand_schema (JSON Schema)

Links

About

Sistema Operacional para a Sociedade

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors