Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
de5aa0a
feat(api-client): git-friendly folder-backed collections
itsmeakhil Jul 21, 2026
b407adc
UI
itsmeakhil Jul 22, 2026
c50bd6e
fix(api-client): Phase 0 trust blockers — offline Monaco, hangs, data…
itsmeakhil Aug 22, 2026
3304e67
feat(media-design): migrate all 10 Media & Design tools onto the shar…
anuphilipp3 Aug 22, 2026
26282f7
perf(api-client): stop whole-tree re-renders per keystroke, keep edit…
itsmeakhil Aug 22, 2026
711f3bd
Merge branch 'api-tester-improvements': git-friendly folder-backed co…
itsmeakhil Aug 22, 2026
58aaf5b
web: API client comparison pages reflect what ships, add Bruno pages
itsmeakhil Aug 22, 2026
5ce3275
feat(api-client): Postman environment import + export
itsmeakhil Aug 22, 2026
45f00ca
chore(api-client): open-folder button in empty state; drop stale Log …
itsmeakhil Aug 22, 2026
ab1b1d6
feat(api-client): import Insomnia and Bruno collections
itsmeakhil Aug 22, 2026
5cca7b4
Merge pull request #311 from mydevtools-tech/anu/update-1.6
itsmeakhil Aug 22, 2026
7ab5e4f
feat(secure-files): encrypted .mydt file vault, shared format crate a…
itsmeakhil Aug 23, 2026
9f7da0b
feat(secure-files): image thumbnails in grid view
itsmeakhil Aug 23, 2026
a744544
feat(backup-codes): regenerate backup codes from settings
itsmeakhil Aug 23, 2026
d772848
feat(secure-files): storage overview with per-type breakdown
itsmeakhil Aug 23, 2026
a32a606
i18n(secure-files): translate the Files tool into all 26 locales
itsmeakhil Aug 23, 2026
fb2f45c
Update page.tsx
itsmeakhil Aug 23, 2026
c2c7e52
Update page.tsx
itsmeakhil Aug 24, 2026
82df5be
UI
itsmeakhil Aug 24, 2026
9bd7247
Merge pull request #312 from mydevtools-tech/features/files
itsmeakhil Aug 24, 2026
63d78ed
fix(api-client): toolbar and key/value spacing
itsmeakhil Aug 24, 2026
abf5190
revert(api-client): load Monaco from the CDN again
itsmeakhil Aug 24, 2026
2b7e0a1
fix(tools): collapsed sidebar keeps its items, identity and top spacing
itsmeakhil Aug 24, 2026
4f3b17e
fix(tools): one sidebar-toggle glyph at a time
itsmeakhil Aug 24, 2026
6b6fc07
Merge remote-tracking branch 'origin/release-v0.1.16' into feat/api-c…
itsmeakhil Aug 24, 2026
a360efa
Update Cargo.toml
itsmeakhil Aug 24, 2026
bcbe669
Merge pull request #310 from mydevtools-tech/feat/api-client-phase0
itsmeakhil Aug 24, 2026
21a1034
Network & API
anuphilipp3 Aug 24, 2026
ca6a2b8
Merge pull request #319 from mydevtools-tech/anu/updates-1.6
itsmeakhil Aug 24, 2026
dec2b56
feat(tool-sidebar): pure rail registry, overflow split and shortcut p…
itsmeakhil Aug 24, 2026
d7f6b70
feat(tool-sidebar): persist panel width per tool
itsmeakhil Aug 24, 2026
3d00139
i18n(tool-sidebar): rail expand/collapse/resize keys in 27 locales
itsmeakhil Aug 24, 2026
e17fd86
feat(tool-sidebar): 48px icon rail with facets, overflow and roving t…
itsmeakhil Aug 24, 2026
beff5c1
feat(tool-sidebar): keep the panel mounted while collapsed and render…
itsmeakhil Aug 24, 2026
f26768f
feat(tool-sidebar): filter lists publish their facets to the collapse…
itsmeakhil Aug 24, 2026
d795f04
feat(tool-sidebar): tree sidebars publish their top-level entries to …
itsmeakhil Aug 24, 2026
4b09535
feat(tool-sidebar): drag-resize the panel, width persisted per tool
itsmeakhil Aug 24, 2026
bd2c7c0
feat(tool-sidebar): cmd+backslash toggle with focus hand-off across c…
itsmeakhil Aug 24, 2026
d325332
fix(secure-files): name the no-folder sentinel instead of embedding a…
itsmeakhil Aug 24, 2026
15b4058
feat(tool-sidebar): shared search, section, row and empty-state primi…
itsmeakhil Aug 24, 2026
74f6071
fix(dashboard): greet the user by their profile name
itsmeakhil Aug 24, 2026
91c8868
fix(notes): hide the sidebar until the vault is unlocked
itsmeakhil Aug 24, 2026
afc100a
Merge pull request #320 from mydevtools-tech/akhil/unify-tool-sidebar
itsmeakhil Aug 24, 2026
99a67c0
Phase 6-Security
anuphilipp3 Aug 24, 2026
3996b6b
feat(settings): segregate settings into tabs
anuphilipp3 Aug 24, 2026
a065461
UI button color fix
itsmeakhil Aug 25, 2026
f5f2617
Merge pull request #321 from mydevtools-tech/akhil/unify-tool-sidebar
itsmeakhil Aug 25, 2026
b24814b
Merge pull request #322 from mydevtools-tech/anu/update-1.7
itsmeakhil Aug 25, 2026
c3cf575
Merge pull request #323 from mydevtools-tech/anu/update-1.9
itsmeakhil Aug 25, 2026
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
11 changes: 10 additions & 1 deletion .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,18 @@ jobs:
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: apps/desktop/src-tauri -> target
workspaces: |
apps/desktop/src-tauri -> target
crates/mydt -> target

# SQLCipher + OpenSSL are vendored (rusqlite bundled-sqlcipher-vendored-openssl),
# so the first run compiles them; rust-cache makes later runs fast.
- name: cargo test
run: cargo test --locked

# Shared .mydt format crate + CLI (no Tauri deps, builds in seconds).
- name: mydt crate (format + CLI)
working-directory: crates/mydt
run: |
cargo test --locked
cargo build --locked --release --features cli
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,11 @@ docs/superpowers/
# graft's local graph cache — regenerable, not committed (run `graft build`).
graft/
# Local Linux build output (published to GitHub releases, never committed)
dist-linux/
dist-linux/

# Rust crates outside the Tauri shell
crates/*/target/

# Regenerated by `next dev` (agentRules); not project instructions
apps/desktop-ui/AGENTS.md
apps/desktop-ui/CLAUDE.md
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ go straight from your machine to your database.
| Tool | Description |
|---|---|
| **Password Manager** | Credential vault encrypted with a password only you know |
| **Secure Files** | Encrypt files and folders into masked `.mydt` objects in any folder you choose; browse, preview and export them after unlocking ([format spec](docs/MYDT_FORMAT.md), [`mydt` CLI](crates/mydt/README.md)) |
| **Encryption Playground** | AES-GCM with a raw key or passphrase; encrypt/decrypt JSON bundles |
| **JWT Decoder** | Decode JWT header, payload and expiry |
| **Hash Generator** | MD5, SHA-1, SHA-256/384/512 digests for text or files |
Expand Down
9 changes: 9 additions & 0 deletions apps/desktop-ui/AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<!-- BEGIN:nextjs-agent-rules -->

# This is NOT the Next.js you know

This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` (resolved from this file's directory; in monorepos the `next` package may not be visible from the repo root) before writing any code. Heed deprecation notices.

This block is written and re-added by `next dev` — verify at `node_modules/next/dist/server/lib/generate-agent-files.js`. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean.

<!-- END:nextjs-agent-rules -->
1 change: 1 addition & 0 deletions apps/desktop-ui/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@AGENTS.md
134 changes: 131 additions & 3 deletions apps/desktop-ui/messages/af.json
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@
"tokenCounter": "Token-teller",
"webhookTester": "Webhook-toetser",
"websocketTester": "WebSocket-toetser",
"whoisLookup": "Whois-opsoek"
"whoisLookup": "Whois-opsoek",
"secureFiles": "Lêers"
},
"Help": {
"title": "Hulp en dokumentasie",
Expand Down Expand Up @@ -183,6 +184,7 @@
"namePlaceholder": "e.g. Alex",
"avatarLabel": "Avatar URL",
"avatarPlaceholder": "https://…",
"edit": "Wysig",
"save": "Save",
"saved": "Profile saved",
"saveError": "Could not save your profile"
Expand Down Expand Up @@ -307,6 +309,22 @@
"restoring": "Herstel tans…",
"restoreSuccess": "Rugsteun herstel",
"restoreError": "Herstel het misluk — verkeerde wagfrase of ongeldige rugsteunlêer"
},
"backupCodes": {
"title": "Rugsteunkodes",
"description": "Eenmalige kodes wat jou kluis herstel as jy jou meesterwagwoord vergeet.",
"remaining": "{remaining} van {total} kodes oor",
"none": "Geen rugsteunkodes gestoor nie.",
"hint": "'n Nuwe stel maak alle bestaande kodes ongeldig.",
"passwordPlaceholder": "Meesterwagwoord",
"regenerateButton": "Genereer nuwe kodes",
"generating": "Genereer tans…",
"wrongPassword": "Verkeerde meesterwagwoord",
"success": "Nuwe rugsteunkodes gegenereer",
"error": "Kon nie rugsteunkodes genereer nie",
"newCodesWarning": "Jy kan dit nie weer sien nie. Laai dit af of kopieer dit nou.",
"downloadButton": "Laai af",
"doneButton": "Ek het my kodes gestoor"
}
},
"Dashboard": {
Expand Down Expand Up @@ -635,6 +653,10 @@
"whoisLookup": {
"title": "Whois-opsoek",
"description": "Soek domein- en IP-registrasiebesonderhede op via RDAP."
},
"secureFiles": {
"title": "Lêers",
"description": "Enkripteer lêers en vouers na gemaskerde .mydt-objekte; blaai en voorskou hulle nadat jy ontsluit het."
}
},
"tabs": {
Expand Down Expand Up @@ -2278,7 +2300,8 @@
"responseCopied": "Antwoord na knipbord gekopieer",
"codeCopied": "Kode na knipbord gekopieer",
"copyFailed": "Failed to copy to clipboard",
"curlCopied": "cURL-opdrag gekopieer"
"curlCopied": "cURL-opdrag gekopieer",
"curlNoUrl": "No URL found in that cURL command"
},
"layout": {
"collections": "Versamelings",
Expand Down Expand Up @@ -2351,6 +2374,8 @@
"collectionsSidebar": {
"title": "API-hulpbronne",
"newCollection": "Nuwe versameling",
"openFolderCollection": "Maak vouer oop as versameling",
"folderCollection": "Vouerversameling",
"tabCollections": "Versamelings",
"tabHistory": "Geskiedenis",
"noCollectionsTitle": "Geen versamelings",
Expand Down Expand Up @@ -2392,6 +2417,7 @@
"placeholderNewEnv": "Nuwe omgewing",
"variablesHeading": "{name}-veranderlikes",
"addVariable": "Voeg veranderlike by",
"exportPostman": "Voer uit (Postman-omgewing)",
"columnVariable": "Veranderlike",
"columnValue": "Waarde",
"placeholderKey": "Sleutel",
Expand Down Expand Up @@ -2448,7 +2474,16 @@
"save": "Save request",
"importCurl": "Import cURL",
"environments": "Environments",
"shortcuts": "Keyboard shortcuts"
"shortcuts": "Keyboard shortcuts",
"importCollection": "Import collection (Postman / HAR)",
"cookies": "Cookies",
"perfRun": "Performance run",
"fuzzRun": "Fuzz run",
"publicMocks": "Public mocks",
"plugins": "Plugins",
"metrics": "Metrics",
"recorder": "Capture & replay",
"extensionImported": "Imported {method} {url} from extension"
}
},
"RichEditor": {
Expand Down Expand Up @@ -5188,6 +5223,12 @@
"offline": "100% aflyn"
},
"ToolSidebar": {
"expand": "Vou sybalk uit",
"collapse": "Vou sybalk in",
"resize": "Verstel sybalk se grootte",
"resetWidth": "Herstel sybalk se breedte",
"moreSections": "Meer afdelings",
"sections": "Sybalk-afdelings",
"show": "Wys sybalk",
"hide": "Versteek sybalk"
},
Expand All @@ -5211,5 +5252,92 @@
"accept": "Deel anoniem",
"decline": "Nee dankie"
}
},
"SecureFiles": {
"title": "Lêers",
"subtitle": "Lêers wat privaat bly totdat jy hulle ontsluit — geënkripteer op jou toestel, gemasker op skyf",
"desktopOnly": "Secure Files is in die rekenaartoepassing beskikbaar.",
"allFiles": "Alle lêers",
"overview": "Oorsig",
"statFiles": "Lêers",
"statFolders": "Vouers",
"statContent": "Inhoudgrootte",
"statContentHint": "Totale grootte van die oorspronklike lêers",
"statOnDisk": "Op skyf",
"statOverhead": "{size} enkripsie-oorhoofse koste",
"byType": "Volgens tipe",
"fileCount": "{count, plural, one {# lêer} other {# lêers}}",
"largestFiles": "Grootste lêers",
"recentlyAdded": "Onlangs bygevoeg",
"openContainingFolder": "Open die vouer wat dit bevat",
"types": {
"image": "Beelde",
"video": "Video",
"audio": "Klank",
"pdf": "PDF",
"archive": "Argiewe",
"code": "Kode",
"doc": "Dokumente",
"sheet": "Sigblaaie",
"file": "Ander"
},
"breadcrumb": "Vouerpad",
"addFiles": "Voeg lêers by",
"addFolder": "Voeg vouer by",
"importFolder": "Voer vouer in",
"newFolder": "Nuwe vouer",
"lock": "Sluit",
"settings": "Bergingsinstellings",
"storageFolder": "Bergingsvouer",
"notSet": "Nie gestel nie",
"chooseFolder": "Kies vouer",
"changeFolder": "Verander vouer…",
"chooseFolderTitle": "Kies waar geënkripteerde lêers gestoor word",
"chooseFolderBody": "Kies enige vouer op hierdie toestel of op 'n eksterne skyf. Buite MyDevTools bevat dit net gemaskerde .mydt-lêers.",
"changeFolderTitle": "Skuif geënkripteerde lêers?",
"changeFolderBody": "Alle .mydt-lêers word van die huidige bergingsvouer geskuif na die een wat jy volgende kies.",
"folderSet": "Bergingsvouer gestel",
"folderMissingTitle": "Bergingsvouer nie gevind nie",
"folderMissingBody": "“{dir}” is nie beskikbaar nie — dit is dalk op 'n ontkoppelde skyf of kom van 'n herstelde rugsteun van 'n ander masjien. Koppel dit weer, of kies 'n nuwe vouer.",
"movedCount": "{count} geënkripteerde lêers geskuif",
"importedCount": "{count} lêers geënkripteer",
"emptyFolderAdded": "Vouer bygevoeg — dit het geen lêers gehad om te enkripteer nie",
"emptyTitle": "Nog geen lêers hier nie",
"emptyBody": "Voeg lêers of 'n hele vouer by. Elke lêer word geënkripteer na 'n .mydt-objek met 'n lukrake naam; die oorspronklike naam, tipe en inhoud is net hier sigbaar.",
"name": "Naam",
"size": "Grootte",
"modified": "Gewysig",
"actions": "Aksies",
"expand": "Vou oop",
"collapse": "Vou toe",
"preview": "Voorskou",
"noPreview": "Geen voorskou vir hierdie lêertipe nie — voer dit uit om dit in 'n ander toepassing te open.",
"export": "Voer uit",
"exportWarningTitle": "Voer 'n gedekripteerde kopie uit?",
"exportWarningBody": "Die lêer word ongeënkripteer geskryf na die plek wat jy kies. Enigiets op daardie toestel kan dit lees.",
"exported": "Gedekripteerde kopie uitgevoer",
"replace": "Vervang inhoud…",
"replaced": "Lêerinhoud vervang",
"rename": "Hernoem",
"fileName": "Lêernaam",
"move": "Skuif na vouer",
"targetFolder": "Vouer",
"targetFolderHint": "Gebruik skuinsstrepe vir geneste vouers, byvoorbeeld projek/config. Laat leeg vir die boonste vlak.",
"folderName": "Vouernaam",
"delete": "Vee uit",
"deleted": "Lêer uitgevee",
"deletedCount": "{count} lêers uitgevee",
"deleteFileTitle": "Vee hierdie lêer uit?",
"deleteFileBody": "“{name}” word permanent uit die geënkripteerde bergingsvouer verwyder.",
"deleteFolderTitle": "Vee hierdie vouer uit?",
"deleteFolderBody": "Elke lêer onder “{dir}” word permanent uit die geënkripteerde bergingsvouer verwyder.",
"unreadableCount": "Onleesbare lêers in die bergingsvouer: {count}",
"unreadableHint": "Hulle is met 'n ander meesterwagwoord geënkripteer, behoort aan 'n ander kluis, of is beskadig.",
"dismiss": "Maak toe",
"viewGrid": "Roosteraansig",
"viewList": "Lysaansig",
"footerNote": "Lêers tot 20 MB. Geënkripteer met Argon2id + XChaCha20-Poly1305; die sleutel bly net in geheue terwyl die kluis ontsluit is.",
"cancel": "Kanselleer",
"save": "Stoor"
}
}
Loading
Loading