Skip to content

Repository files navigation

Feriadex finds the best days to take vacation — bridging holidays and weekends (emendar) to maximize consecutive rest while sacrificing the fewest working days. The name blends feriado (holiday) and index.

Brazil-first (pt-BR), built to scale internationally. Front-end only: a fully static site, no backend — holiday data is computed/baked, and all optimization runs in the browser.

Status: v1 working. Engine, Brazilian holiday data, CLT/free rules and a full UI are in place. See docs/PROJECT_STATE.md.

What it does

  • Pick a work regime (CLT toggle), state and city (searchable, accent-insensitive dropdowns), your working week, and a search period.
  • See a live holiday counter — Nacionais · Estaduais · Municipais · Facultativos — each clickable to list its dates; uncheck any single day you'll actually work so it stops counting as time off.
  • Configure the split:
    • CLT on: available days (30 / 20 + abono / other) + "Dividir em" (1–3) → all law-valid partitions (one block ≥14, others ≥5) appear as tabs, ranked by best rest.
    • CLT off (free): a block builder — stepper for the number of blocks, one number field per block, live total, and "Equilibrar".
    • Banco de horas: extra days placed as an additional optimized block.
  • Results as period tabs: each period offers the best window per month (grouped by year) as sub-tabs; picking one shows a colored month calendar (Férias / Fim de semana / extra) with Início · Retorno · Extras · Total, plus Dias extras and Máx. possível badges.
  • Enforces CLT Art. 134 (Lei 13.467/2017): ≤3 periods, one ≥14 / others ≥5, no start in the 2 days before a holiday/rest. Mapped in docs/COMPLIANCE.md.

Architecture

TypeScript monorepo (pnpm workspaces + Turborepo). Country logic is data, not code — adding a country means adding packs, not editing the engine. Details in docs/ARCHITECTURE.md.

apps/web            Next.js static-export app (UI, no server)
packages/core       pure engine — calendar, Computus, bridge, split, describe
packages/holidays   holiday providers + baked data (national computed;
                    state/facultativo computed; cities/municipal baked)
packages/policies   labor-rule packs (CLT, PJ/free) + start rule + sell-back
packages/i18n       message catalog (pt-BR)
packages/config     shared tsconfig + Tailwind preset
docs/               architecture, conventions, compliance, backlog, state, …

Getting started

Requires Node ≥ 20 and pnpm (this environment uses corepack pnpm).

pnpm install              # install workspace deps
pnpm test                 # run the test suite (vitest — 60 tests)
pnpm --filter web dev     # run the app at http://localhost:3000
pnpm --filter web build   # static export → apps/web/out/

Regenerate the baked city/municipal data (build-time, one-off):

node --experimental-strip-types packages/holidays/scripts/import-cities-municipal.ts

Documentation

Start with docs/AI_CONTEXT.md. Key docs: architecture · conventions · compliance · backlog · project state · redesign spec.

Data & licensing

  • National + facultativo holidays: computed (fixed dates + Gregorian Computus for movable feasts). Any year.
  • State: computed from a curated rule table (packages/holidays/src/br/estadual.ts).
  • Cities: IBGE municipality list (baked). Municipal holidays: baked from an open MIT dataset + curated cities. Attribution in packages/holidays/DATA_LICENSE.md.

About

Feriadex is an application that calculates extra days off and vacation opportunities based on holidays, weekends, and calendar patterns. The name combines “feriado” and “index”, reflecting the app’s goal of indexing dates to help users plan smarter breaks.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages