Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# EditorConfig — https://editorconfig.org
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 2

[*.md]
trim_trailing_whitespace = false

[*.{yml,yaml}]
indent_size = 2
6 changes: 6 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Revisions to ignore in `git blame` — bulk reformats with no logic changes.
# Enable locally with: git config blame.ignoreRevsFile .git-blame-ignore-revs
# (GitHub applies it automatically.)

# Phase E2 — prettier --write across the repo
91c11503a665307c4ce2f5bb5b6a15ef2e16fa75
25 changes: 25 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
name: Bug report
about: Something isn't working as expected
title: ''
labels: bug
assignees: ''
---

**What happened**
A clear description of the bug.

**Steps to reproduce** 1. 2. 3.

**Expected behaviour**
What you expected to happen instead.

**Environment**

- Build SHA (from the About page):
- Browser / OS:
- Mode: local-only / signed-in

**Notes**
Screenshots, console errors, or anything else useful. Please do **not** paste
confidential source text.
20 changes: 20 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for Verbalis
title: ''
labels: enhancement
assignees: ''
---

**The problem**
What are you trying to do that Verbalis makes hard today?

**Proposed solution**
What you'd like to see. Keep in mind Verbalis is local-first and privacy-first —
features should respect that (nothing leaves the device unless the user asks).

**Alternatives considered**
Any workarounds or other approaches.

**Notes**
Anything else — prior art in memoQ / Trados / OmegaT, mockups, etc.
23 changes: 23 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
## Summary

<!-- What does this change do, and why? -->

## Changes

<!-- Bullet the notable changes. -->

-

## Testing

<!-- How did you verify this? Tick what you ran. -->

- [ ] `pnpm typecheck`
- [ ] `pnpm lint`
- [ ] `pnpm test:unit`
- [ ] `pnpm test:e2e` (for UI-facing changes)
- [ ] `pnpm build`

## Notes

<!-- Anything reviewers should know: trade-offs, follow-ups, screenshots. -->
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ jobs:
- run: pnpm install
- run: pnpm generate-icons
- run: pnpm typecheck
- run: pnpm lint
- run: pnpm format:check
- run: pnpm test:unit
- run: pnpm build
# Regression guard for the cloud path (ROADMAP §3.1): build once with the
Expand Down
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
20
8 changes: 8 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
dist
dev-dist
coverage
node_modules
pnpm-lock.yaml
src-tauri/target
public/dictionaries
public/corpora
8 changes: 8 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"semi": false,
"singleQuote": true,
"trailingComma": "all",
"printWidth": 100,
"tabWidth": 2,
"arrowParens": "always"
}
6 changes: 3 additions & 3 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"IDX.aI.enableInlineCompletion": true,
"IDX.aI.enableCodebaseIndexing": true
}
"IDX.aI.enableInlineCompletion": true,
"IDX.aI.enableCodebaseIndexing": true
}
60 changes: 60 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Changelog

Notable changes to Verbalis. Format loosely follows
[Keep a Changelog](https://keepachangelog.com/).

## [Unreleased] — polish pass ("Snow Leopard")

A refinement release: correctness, coherence, and repo standards — no new
features.

### Fixed

- Contact email corrected to `pedrobritx@gmail.com` across the app, README and
LICENSE.
- Sidebar / status-filter active highlight now adapts to the light theme (it
hardcoded the dark-theme accent) via a new `--color-accent-subtle` token.
- Top-bar breadcrumb no longer shows raw paths for `/corpora`, `/addons`,
`/guide`, `/about`.

### Changed

- Personal / portfolio links now point at the `britx.me` domain.
- **Quick lookup follows the open project's languages.** Opening lookup from
inside a project defaults its source/target to that project instead of the
global lookup defaults; the import dialog seeds its pair from your history
(distinct `pt→en` fallback for this PT↔EN-oriented tool) instead of a fixed
`en→es`, and remembers the pair you import with.
- **Signed-in users are attributed by their account name.** Tracked changes,
comments, collaboration presence and version sign-off use your account name
automatically; Settings no longer asks for a separate local name when signed
in. The device-local author id is unchanged.
- The first-run welcome screen is a proper hero (brand, value props, three-step
flow); shared links and PWA installs get Open Graph / Twitter / theme-color
metadata.

### Added

- **Tooling the repo lacked:** ESLint (flat config) + Prettier + knip +
`.editorconfig` / `.nvmrc`, with `lint` and `format:check` wired into CI.
- Contributor hygiene: `CONTRIBUTING.md`, `SECURITY.md`, PR + issue templates,
and a `docs/` index.

### Removed

- Dead code: an unused `tooltip` UI primitive, an orphaned `dictionary` feature,
an unused schema barrel, and the unused `jimp` / `@radix-ui/react-tooltip`
dependencies.

### Internal

- Name-fallback logic centralised in `features/account/displayName.ts`.
- Repo-wide `prettier --write` isolated in one commit (see
`.git-blame-ignore-revs`).
- Historical planning docs moved under `docs/history/`.

---

Earlier history (the six-milestone Verbalis 2.0 "Translation IDE" revamp —
tracked changes, comments, accounts, real-time collaboration, roles, extensions
& connectors) is recorded in [`docs/revamp/STATUS.md`](docs/revamp/STATUS.md).
59 changes: 59 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Contributing to Verbalis

Thanks for your interest in Verbalis. A few things to know before you start.

## License context

Verbalis is **source-available, not open source** (see [`LICENSE.md`](LICENSE.md)).
The source is here so you can read it, self-host it, and use it as an individual
for free. Contributions are welcome, but by opening a pull request you agree that
your contribution is licensed under the same terms and that the maintainer may
relicense it as part of the project. For anything substantial, please open an
issue to discuss first.

## Development

Verbalis is a local-first React + TypeScript + Vite app. It runs 100% locally
with no account or backend.

```bash
pnpm install
pnpm dev # start the dev server
pnpm test:unit # unit tests (vitest)
pnpm test:e2e # end-to-end (playwright)
pnpm typecheck # tsc, no emit
pnpm lint # eslint
pnpm format:check # prettier check
pnpm build # production build
```

- **Node** 20 (see `.nvmrc`) and **pnpm** (pinned via `packageManager` in
`package.json`).
- The optional signed-in mode is behind `VITE_SUPABASE_*` — leave it unset to
develop the local-only path. See [`docs/cloud.md`](docs/cloud.md).

## Before you open a PR

Every change must be green:

```bash
pnpm typecheck && pnpm lint && pnpm test:unit && pnpm build
```

Run `pnpm test:e2e` too for anything UI-facing. CI runs all of these.

## Conventions

- **Keep `core/*` pure.** Business logic goes in `src/core` as pure functions
with injected I/O (`fetchImpl`, clients); push side effects to the edges. This
is why the test suite is strong — keep it that way.
- **The optional cloud must tree-shake to zero** when unconfigured. Load Supabase
only through the dynamic `getSupabase()` path; never import
`@supabase/supabase-js` statically.
- **Match the surrounding code** — its naming, comment density, and idioms.
- Architecture notes live in [`docs/architecture.md`](docs/architecture.md).

## Reporting bugs / requesting features

Use the issue templates. For anything security-related, follow
[`SECURITY.md`](SECURITY.md) instead of opening a public issue.
10 changes: 5 additions & 5 deletions LICENSE.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ licence to use, copy, modify, and self-host the Software for their own work,
> existing "Created by Pedro Brito" credit and the link to
> <https://github.com/pedrobritx/verbalis> intact in the application's
> About/credits screen, and — where you publish work, a fork, or a derivative
> built on the Software — state that it is *"powered by Verbalis, created by
> Pedro Brito"* with a link back to this repository.
> built on the Software — state that it is _"powered by Verbalis, created by
> Pedro Brito"_ with a link back to this repository.

That attribution is the only thing asked of Individuals.

Expand All @@ -49,7 +49,7 @@ If you are an Organization (any entity larger than one person), please contact
the Author to arrange terms. Pricing is set individually and scaled to the size
and nature of your use:

- **Email:** pedrohbrito@me.com
- **Email:** pedrobritx@gmail.com
- **GitHub:** <https://github.com/pedrobritx>
- **LinkedIn:** <https://www.linkedin.com/in/pedrobritx/>

Expand Down Expand Up @@ -78,6 +78,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

---

*Not sure which tier applies to you? If you are one person using Verbalis for
_Not sure which tier applies to you? If you are one person using Verbalis for
your own translation work, you are covered for free under Section 2 — just keep
the credit. Anything bigger, reach out and we'll sort out fair terms.*
the credit. Anything bigger, reach out and we'll sort out fair terms._
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ license — see [`LICENSE.md`](LICENSE.md):
**credit the developer** and keep the link back to this project.
- **Organizations — get in touch.** Any team or company larger than one person
needs a commercial license. Pricing is set individually and fairly —
contact **pedrohbrito@me.com**.
contact **pedrobritx@gmail.com**.

---

Expand Down
34 changes: 34 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Security Policy

Verbalis is a privacy-first, local-first CAT tool: by design, your files,
translation memory and glossaries stay in your browser. Security reports are
taken seriously.

## Reporting a vulnerability

**Please do not open a public issue for security vulnerabilities.**

Instead, email **pedrobritx@gmail.com** with:

- a description of the issue and its impact,
- steps to reproduce (a proof of concept if you have one),
- the affected version / build (the About page shows the build SHA).

You can expect an acknowledgement within a few days. Please give a reasonable
window to investigate and ship a fix before any public disclosure.

## Scope

Especially relevant for this project:

- anything that could cause user data (source text, TM, glossaries) to **leave
the device** unexpectedly in local-only mode,
- issues in the optional signed-in mode (Supabase auth, RLS, cloud sync,
collaboration) that could expose one user's data to another,
- the storage-connector OAuth flows (Google Drive, OneDrive).

## Out of scope

- Vulnerabilities in third-party dependencies without a demonstrated exploit in
Verbalis (report those upstream).
- Anything requiring physical access to an unlocked device.
40 changes: 40 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Verbalis documentation

An index of what lives here and whether it's current.

## Living reference

Keep these up to date as the app changes.

- [`architecture.md`](architecture.md) — tech stack, folder map, storage schema
(Dexie v7), deployment, and a walk through the major subsystems.
- [`cloud.md`](cloud.md) — the optional signed-in mode: Supabase setup, auth
providers, sync, cloud projects, collaboration, and the storage connectors
(Google Drive / OneDrive), with per-feature manual-verification matrices.

## Working notes

- [`refactor-audit.md`](refactor-audit.md) — a rolling health snapshot and
prioritised backlog of polish / refactor opportunities.

## Revamp record (Verbalis 2.0)

The six-milestone "Translation IDE" revamp that added tracked changes, comments,
accounts, real-time collaboration, roles, and extensions. **Done** — kept as the
build log, not a directive.

- [`revamp/ROADMAP.md`](revamp/ROADMAP.md) — the canonical scope + locked
decisions (D1–D9).
- [`revamp/STATUS.md`](revamp/STATUS.md) — the phase-by-phase build log.
- [`revamp/prompts/`](revamp/prompts/) — the per-phase build prompts
(scaffolding; historical).

## Historical / superseded

Pre-build planning. Describes the _intended_ product; the shipped app is the
source of truth now. Kept for context.

- [`history/vision/`](history/vision/) — the original product/UX/architecture
vision documents.
- [`history/roadmap-professional-features.md`](history/roadmap-professional-features.md)
— the pre-revamp "road to a professional CAT tool" plan (largely delivered).
Loading
Loading