Releases: tinkermesomething/lazyproxyflare
Release list
v1.2.1: Bugfix & README
Bug Fix
- Fixed --version flag reporting dev instead of the actual release version. The default VERSION in the Makefile was hardcoded to dev and never updated for releases.
- Updated README
v1.2.0 - nutmeg
v1.2.0 NUTMEG
Profile Management
- Profile deletion — Delete profiles with confirmation modal (d in profile selector)
- Export/Import — Export profiles as .tar.gz bundles (x), import from archive (i) with duplicate detection
- Profile editing overhaul — Enter-to-edit field mode with clear navigation (↑/↓/Tab), Ctrl+S to save
- Danger zone warning — Profile edit warns users to export before making changes
External Editor
- Open Caddyfile in editor — Press E on the Caddy tab to launch your configured editor
- Editor prompt — If no editor is set, prompts you to configure one and saves it to your profile
- Fallback chain — Checks profile config, then $EDITOR env var, then prompts
Audit Log
- Search — Press / to search across all log entries
- Filter by operation — Press f to cycle through operation types
- Filter by result — Press r to cycle through success/failure
Backup Rotation
- Count limits — Set max number of backups to retain per profile
- Size limits — Set max total backup size in MB per profile
- Configurable in profile edit — Backup limits are editable fields in the profile editor
- Manager display — Backup manager shows current limits in summary
UX Improvements
- Help pages updated — All 5 help pages reflect new keybindings (profile selector, editor, audit filters, backup manager)
- README disclaimer — Added prominent warning about risks of modifying DNS/Caddyfile without backups
- Status bar — Shows E: editor hint when on Caddy tab
Under the Hood (v1.1 refactor, included in this release)
- Extracted monolithic app.go (3000+ lines) into 20+ focused files
- Extracted 7 sub-structs from Model for cleaner state management
- DRY Cloudflare client, pre-compiled regexes, expanded test coverage
- 25 files changed, ~1400 lines added
v1.1.0 - Code Refactor
CODE REFACTOR
V1.1.0
- refactor: DRY cloudflare client, pre-compile regexes, add test coverage
- Extract doRequest() and checkAPIError() helpers in cloudflare client
- Pre-compile regex patterns at package level in config validation
- Cache getFilteredEntries() calls in key handlers
- Add DNSClient interface for testability
- Add tests for diff engine, config validation, and audit logger
- refactor: extract DeleteState + SyncState sub-structs from Model
Group delete/sync fields into dedicated sub-structs to reduce Model's
flat field count. Pure mechanical rename — no behavior changes.
- refactor: extract BulkDeleteState sub-struct from Model
Group bulk delete fields into dedicated sub-struct. Pure mechanical
rename — no behavior changes.
- refactor: extract BackupState sub-struct from Model
Group backup manager fields (cursor, scroll, preview, retention,
restore scope) into dedicated sub-struct. Pure mechanical rename.
- refactor: extract AuditState sub-struct from Model
Group audit log fields (logger, logs, cursor, scroll) into dedicated
sub-struct. Pure mechanical rename — no behavior changes.
- refactor: extract MigrationState sub-struct, delete dead field
Group migration wizard fields into dedicated sub-struct. Also removes
unused snippetCategoryFilter field (dead code, 0 usages).
- refactor: extract SnippetPanelState + ProfileState sub-structs
Group snippet panel fields (cursor, scroll, editing state) and profile
fields (current name, available, edit data/cursor) into dedicated
sub-structs. Pure mechanical rename — no behavior changes.
- refactor: extract trivial key handlers to key_handlers_simple.go
Move 22 simple switch case bodies to dedicated methods in a new file.
Each case becomes a one-line delegation. No behavior changes.
Extracted handlers: search, filters, sort, add entry, bulk delete,
backup, audit log, batch ops, sync, migration, help, quit, cancel
confirmation, page up/down, home/end, list j/k navigation.
- refactor: extract confirmation handler to key_handlers_confirm.go
Move 'y' key handler (114 lines, 11 branches) to handleConfirmAction()
in dedicated file. Switch case becomes a one-line delegation.
- refactor: extract esc/dismiss handler to key_handlers_dismiss.go
Move 219-line esc/ctrl+w case body into handleDismiss() method,
replacing inline logic with one-line delegation.
- refactor: extract navigation handlers to key_handlers_nav.go
Move 412-line down/up case bodies into handleNavigateDown() and
handleNavigateUp() methods, replacing inline logic with one-line
delegations.
- refactor: extract enter handler to key_handlers_enter.go
Largest remaining case (315 lines) extracted to handleEnterKey() method.
Handles ViewList edit, snippet detail, error dismiss, wizard delegation,
delete/restore scope, bulk delete, add/edit validation, search accept,
backup restore/cleanup/preview.
- refactor: extract tab/shift+tab handlers to key_handlers_tab.go
169 lines extracted to handleTabKey() and handleShiftTabKey() methods.
Both handle profile edit, wizard, snippet wizard (5 step branches),
list view navigation, and add/edit form field cycling.
- refactor: extract space handler to key_handlers_toggle.go
94 lines extracted to handleSpaceKey() method. Handles profile edit
toggles, snippet wizard checkboxes (6 step branches), list view
entry selection, and add/edit form field toggles.
- refactor: extract backspace handler to key_handlers_simple.go
63 lines extracted to handleBackspaceKey() method. Handles profile edit,
add/edit form field deletion, search query trimming, and snippet wizard
IP restriction CIDR field trimming.
- refactor: extract remaining medium handlers to key_handlers_simple.go
13 handlers extracted: handleOpenSnippetWizard, handleDeleteAction,
handleProfileOrPreview, handleRestoreBackup, handleNavigateRight/Left,
handleDeleteBackup, handleCleanupBackups, handleRefreshData,
handleGoToTop/Bottom, handleEditProfile, handleAddProfile.
- refactor: extract pre-switch text input to key_handlers_input.go
155 lines extracted to handleTextInput() method with 3-value return
(model, cmd, handled). key_handlers.go is now a pure dispatch table
at 170 lines (down from 1,157 before phase 3, 2,111 originally).
- refactor: extract CRUD command functions to commands_crud.go
- refactor: extract bulk command functions to commands_bulk.go
- refactor: extract backup command functions to commands_backup.go
- refactor: extract async message handlers to update_handlers.go
- refactor: extract mouse handler to update_mouse.go
- refactor: extract snippet operations to snippet_operations.go
- refactor: extract view rendering to views_render.go
- refactor: extract model constructors and message types from app.go
- docs: update README for v1.1.0 release
Update architecture section to reflect refactored file structure,
bump code statistics, and move roadmap to v1.1 (current) / v1.2 (planned).
I have used Claude Code for this.
LazyProxyFlare v1.0.0
LazyProxyFlare v1.0.0
Full-featured TUI for managing Cloudflare DNS records and Caddy reverse proxy configurations.
Features
- 5-step interactive setup wizard
- Cloudflare DNS record management (CRUD with CNAME and A records)
- Caddy reverse proxy configuration with live reload
- Snippet wizard (templated, custom, guided modes) with 14 built-in templates
- Backup & restore with diff preview and 30-day retention
- Multi-profile support with profile editing
- Caddyfile migration wizard
- Batch operations (multi-select delete/sync)
- Audit logging
- Full mouse and keyboard support
Install
git clone https://github.com/tinkermesomething/lazyproxyflare.git
cd lazyproxyflare
make && sudo make install
Requirements
- Go 1.22+
- Cloudflare API token with DNS edit permissions
- SSH access to Caddy server(s)