Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 87ca7d418d |
@@ -0,0 +1,403 @@
|
||||
:robot: I have created a release *beep* *boop*
|
||||
---
|
||||
|
||||
|
||||
## [2.7.0](https://github.com/PicPeak/picpeak/compare/v2.6.1...v2.7.0) (2026-06-29)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **accounting:** Accounting nav section + relocate Tax report out of CRM ([30c0007](https://github.com/PicPeak/picpeak/commit/30c0007f40594e679f5d997219985107de784cf4))
|
||||
* **accounting:** Accounting settings tab (km / per-diem rate, require-proof) ([2b7495e](https://github.com/PicPeak/picpeak/commit/2b7495e4dc46c6033f581a0ce2ffde83b9ef89b4))
|
||||
* **accounting:** add a Banana "Income & Expense" (cash-book) export format ([445d6d7](https://github.com/PicPeak/picpeak/commit/445d6d7b6d6b0692d5b7c0a3dd0ca8b71dfad6ef))
|
||||
* **accounting:** backend rework - incoming invoices vs internal expenses (stage 2) ([5e78fb6](https://github.com/PicPeak/picpeak/commit/5e78fb6475513cbda38257b406493eb649a5e33c))
|
||||
* **accounting:** bill editor VAT dropdown + GET returns vat_code snapshot ([2479d87](https://github.com/PicPeak/picpeak/commit/2479d87afc5b094a5323bca0b67e6404ce05a4e2))
|
||||
* **accounting:** clearer tax-export window + gate journal export on accounting flag ([3edd832](https://github.com/PicPeak/picpeak/commit/3edd8321035c48d6b3e8b157d4b94075657fc7a0))
|
||||
* **accounting:** consolidate VAT/financial config into Settings ’ Accounting ([dc7b87b](https://github.com/PicPeak/picpeak/commit/dc7b87bb874e22ac6902fd2d48531ecdb6108c88))
|
||||
* **accounting:** data-driven revenue-rate VAT map (multi-country) ([873be91](https://github.com/PicPeak/picpeak/commit/873be910a5e88a6d942f116c2bcfecfef9161024))
|
||||
* **accounting:** event booking via dropdown (Company or an event) ([81af445](https://github.com/PicPeak/picpeak/commit/81af4453e796285df05446cfd333e53b6b1cc19e))
|
||||
* **accounting:** expense invoiced/paid lifecycle + edit-until-invoiced; decouple tax report from bills flag ([2e8e4a0](https://github.com/PicPeak/picpeak/commit/2e8e4a0f86d5b7a4dc0fa712bcb4cbab4fbe9861))
|
||||
* **accounting:** expenses ledger + supplier-payment toggle ([0c35ac4](https://github.com/PicPeak/picpeak/commit/0c35ac43e616e4b49da8089c95239ac06ec402c5))
|
||||
* **accounting:** explain dispositions inline, drop markup from pass-through ([9a023c0](https://github.com/PicPeak/picpeak/commit/9a023c019750ebcd8d21e005aaf9a77a32cb34a3))
|
||||
* **accounting:** frontend rework - separate Incoming invoices vs Expenses (stage 2) ([f305541](https://github.com/PicPeak/picpeak/commit/f305541f903c02329309a5d2513eded9792c58c5))
|
||||
* **accounting:** inbound supplier-invoice capture + expense re-bill (backend) ([c305492](https://github.com/PicPeak/picpeak/commit/c3054928453a23c599894b669b6ac3c623fa4183))
|
||||
* **accounting:** incoming-invoice triage refinements (paid badge, click-to-categorize, reference, categorize+pay) ([72b784c](https://github.com/PicPeak/picpeak/commit/72b784c9d751d2c98014cf35ce3035c60664056a))
|
||||
* **accounting:** incoming-invoice workflow v2 + VAT/financial settings consolidation ([b527915](https://github.com/PicPeak/picpeak/commit/b5279155ea4c545e13bab8bde46a39cfccf107fe))
|
||||
* **accounting:** incoming-invoices inbox with camera capture + triage/re-bill ([2b5efeb](https://github.com/PicPeak/picpeak/commit/2b5efebaff0ed05b99b84802811ee662911e9468))
|
||||
* **accounting:** invoices force-enable the Accounting master ([51837c3](https://github.com/PicPeak/picpeak/commit/51837c3a88f711b164fafe2c7677e1a91c7542f9))
|
||||
* **accounting:** Layer A backend chart of accounts, VAT codes, Treuhänder export ([03cc250](https://github.com/PicPeak/picpeak/commit/03cc250b47518573d2cd4fa45da331a3e47ea3fd))
|
||||
* **accounting:** Layer A frontend chart of accounts CRUD + Treuhänder export UI ([7e0098e](https://github.com/PicPeak/picpeak/commit/7e0098edcd42dc9d6b91c39f60627122d8394bff))
|
||||
* **accounting:** manual "add expense" (no document) on the ledger ([703f727](https://github.com/PicPeak/picpeak/commit/703f72742ddc9028a3214e108563320679ec4ade))
|
||||
* **accounting:** move Chart of accounts into Settings ’ Accounting ([97795f6](https://github.com/PicPeak/picpeak/commit/97795f6d1ed25d23396a76b63c225b110ddc315e))
|
||||
* **accounting:** move Treuhänder export onto the Tax page ([b1f73c1](https://github.com/PicPeak/picpeak/commit/b1f73c1df9408ddae821760eb8ed57c726d2e056))
|
||||
* **accounting:** PDF/image preview in triage, opened at the QR-bill (no OCR) ([502fbad](https://github.com/PicPeak/picpeak/commit/502fbad5a8cb11e075cb098ad05fd94a78aae396))
|
||||
* **accounting:** rasterise inbound PDFs server-side (never serve raw to browser) ([e111522](https://github.com/PicPeak/picpeak/commit/e111522415c21ca8ef47f0d8be48c95bd8ab8c69))
|
||||
* **accounting:** re-categorize incoming invoices, note field, pending re-bill pool ([36a8e42](https://github.com/PicPeak/picpeak/commit/36a8e42f90f15a1ba96d9c4f004fa542d33e4937))
|
||||
* **accounting:** re-viewable incoming invoices + expense invoiced/paid lifecycle UI ([727bdab](https://github.com/PicPeak/picpeak/commit/727bdab6e087e1a3611295417a05f61939204487))
|
||||
* **accounting:** relocate VAT codes + rate maps into Settings ’ Accounting ([4ff5b84](https://github.com/PicPeak/picpeak/commit/4ff5b84cb66e40be960c2be7a67334cf0cc98be2))
|
||||
* **accounting:** scope the tax-report export to income-only or cost-only ([9f3b286](https://github.com/PicPeak/picpeak/commit/9f3b28684ff36b131420cd975df634a29d660323))
|
||||
* **accounting:** snapshot the chosen VAT code on quote/invoice create + storno ([5b52969](https://github.com/PicPeak/picpeak/commit/5b52969e36a41bbc08a98e0bca1ce0e937d77f56))
|
||||
* **accounting:** snapshot vat_code on quotes/invoices + export prefers it (foundation) ([0a7dc1c](https://github.com/PicPeak/picpeak/commit/0a7dc1cf5da17a5bef204f6680844c8ab2b44269))
|
||||
* **accounting:** split Incoming invoices vs Expenses - flags, schema, settings (stage 1) ([c59df52](https://github.com/PicPeak/picpeak/commit/c59df52d407fec86168aa7a2087c1a29c7660ab8))
|
||||
* **accounting:** supplier-country tax default + configurable default output VAT code ([267b121](https://github.com/PicPeak/picpeak/commit/267b121d66994bc57b10cd0694ab0e4320b163d9))
|
||||
* **accounting:** tax report VAT-payable honours registration + reclaim ([d7107aa](https://github.com/PicPeak/picpeak/commit/d7107aaf0adf5e03f08085c7691b6530b15ed702))
|
||||
* **accounting:** tax window shows all costs (incoming invoices + expenses) alongside revenue ([545ef33](https://github.com/PicPeak/picpeak/commit/545ef334f42d3cb09e63ffc77a80dd684ab5a807))
|
||||
* **accounting:** unify tax report into one signed, typed, sortable ledger ([fd1dd81](https://github.com/PicPeak/picpeak/commit/fd1dd81e8dfc790d960a7e6d888beba895a23461))
|
||||
* **accounting:** VAT registration + reclaim-country settings in the Accounting tab ([4d87684](https://github.com/PicPeak/picpeak/commit/4d876848823bce2c79e629308c92206c64d9893d))
|
||||
* **accounting:** VAT registration/reclaim settings + un-gated VAT-codes read ([fbbbb8a](https://github.com/PicPeak/picpeak/commit/fbbbb8ab7335f07ecf48e217632c7011bd7c88cd))
|
||||
* **accounting:** VAT-code dropdown in the quote editor (+ reusable VatRateSelect) ([6e1924b](https://github.com/PicPeak/picpeak/commit/6e1924bae8b50dbb8460e151c1d9a79553fddb19))
|
||||
* admin-configurable workflow engine + dunning/Mahngebühr rework (RFC feedback welcome) ([15be3b8](https://github.com/PicPeak/picpeak/commit/15be3b8d32965eedc08d46ccc525c65a3bf34de6))
|
||||
* **admin/exports:** inline preview modal with copy-to-clipboard ([#631](https://github.com/PicPeak/picpeak/issues/631)) ([fc5c1ae](https://github.com/PicPeak/picpeak/commit/fc5c1ae93f87678fcc16bc84a14a60a59b1a3c7b))
|
||||
* **admin/exports:** inline preview modal with copy-to-clipboard ([#631](https://github.com/PicPeak/picpeak/issues/631)) ([27b5f7e](https://github.com/PicPeak/picpeak/commit/27b5f7e4b68e43345cd99dd5cc77308dcd7ec98b))
|
||||
* **admin/users:** reactivate + delete actions for deactivated admin users ([c4a9b36](https://github.com/PicPeak/picpeak/commit/c4a9b3636fc7a9209ae724acb7c8cffe141d93ea))
|
||||
* **admin/users:** reactivate + delete actions for deactivated admin users ([dfcebcc](https://github.com/PicPeak/picpeak/commit/dfcebccee98a551980ad2be78a8356fd39894f8a))
|
||||
* **admin:** clickable version links + update-available modal with changelog & upgrade command ([48cf112](https://github.com/PicPeak/picpeak/commit/48cf1121e546e112cd37d94f7924a808c020dd8f))
|
||||
* **admin:** link version numbers in sidebar to GitHub release notes ([#566](https://github.com/PicPeak/picpeak/issues/566)) ([d231623](https://github.com/PicPeak/picpeak/commit/d231623c59498ae56e13bee45a70100423053e9b))
|
||||
* **admin:** System health page surfacing stuck/failed emails ([5d7b545](https://github.com/PicPeak/picpeak/commit/5d7b545bf74ee945799e0fbe809e9c96266f3926))
|
||||
* **admin:** update-available modal with aggregated changelog + upgrade command ([#567](https://github.com/PicPeak/picpeak/issues/567)) ([832f7ba](https://github.com/PicPeak/picpeak/commit/832f7bad450112dca697b959644e259328a6cfa9))
|
||||
* **analytics:** pluggable trackers Umami + Rybbit + Custom ([#663](https://github.com/PicPeak/picpeak/issues/663) Phase 1) ([83461fe](https://github.com/PicPeak/picpeak/commit/83461fe5d4d44006482167464d92e70546cf7377))
|
||||
* **analytics:** pluggable trackers Umami + Rybbit + Custom ([#663](https://github.com/PicPeak/picpeak/issues/663) Phase 1) ([ab50145](https://github.com/PicPeak/picpeak/commit/ab501459a4208c3a30637a31f0f6f31285ae5ef2))
|
||||
* **backup-stats:** per-Stage-B-path counters in backup statistics ([e7dffa6](https://github.com/PicPeak/picpeak/commit/e7dffa656bff8e4bb366bbd7f20f973c51ccb318))
|
||||
* **backup:** admin endpoint to verify CRM document-artefact integrity ([4812fcd](https://github.com/PicPeak/picpeak/commit/4812fcdec38d7bfdbb5eac80eb6fe004f405b970))
|
||||
* **backup:** config-driven walker via backup_paths table ([302fc6b](https://github.com/PicPeak/picpeak/commit/302fc6b9371ff08ee2d2157325d4603b00b5f7b4))
|
||||
* **backup:** coverage diagnostic what will the next backup miss? ([03e6617](https://github.com/PicPeak/picpeak/commit/03e6617f38344434add3bb866e13807f19940519))
|
||||
* **backup:** UI for backup-integrity verifier tab + post-restore CTA ([7e2feca](https://github.com/PicPeak/picpeak/commit/7e2feca12f894a9d02193d85634e69d76710fc14))
|
||||
* **billing:** manual cadence + fix admin date inputs ignoring date-format setting ([06b4522](https://github.com/PicPeak/picpeak/commit/06b4522deceb06ed1d90e188a62b82fc7e0e91d6))
|
||||
* **bills:** capture event name/date when importing historical invoices ([db7d11d](https://github.com/PicPeak/picpeak/commit/db7d11dc7ff7aff7f6da15698c9f964a1ab4d1a1))
|
||||
* **bills:** link event label to its event detail page ([7c39a30](https://github.com/PicPeak/picpeak/commit/7c39a30957a59c379b6abe6702798923488a9021))
|
||||
* **branding:** dark-mode logo variant ([4790ea5](https://github.com/PicPeak/picpeak/commit/4790ea5ccdc01f6cf3c5369b001618ed73d80b75))
|
||||
* **branding:** force color mode = standard look; hide overridden theme controls ([4749e22](https://github.com/PicPeak/picpeak/commit/4749e222dc41695a2494a3b740952745bb854d4e))
|
||||
* **branding:** symmetric light/dark logo fallback + customer surface ([44590b8](https://github.com/PicPeak/picpeak/commit/44590b8c0b21f22cbf7857b71951d2747db5be98))
|
||||
* **categories:** per-category download permissions ([#640](https://github.com/PicPeak/picpeak/issues/640) part B) ([820f483](https://github.com/PicPeak/picpeak/commit/820f4835f1f5a41cbef6816c387ef9ec3dafd526))
|
||||
* **common:** generic Promise-based ConfirmDialog primitive ([#640](https://github.com/PicPeak/picpeak/issues/640) part C) ([a3fcb5b](https://github.com/PicPeak/picpeak/commit/a3fcb5bc9e82849ebe1f55620e8aa7e60ccd973f))
|
||||
* **contracts:** preview PDF before sending ([7eec133](https://github.com/PicPeak/picpeak/commit/7eec1337da80b647c560d1d876dff56ed83b77f8))
|
||||
* CRM module quotes, contracts, invoices, hours, calendar, tax ([5f0fcc2](https://github.com/PicPeak/picpeak/commit/5f0fcc225c29ce0f4410c5aba5ecd5a3a6d07259))
|
||||
* **crm:** 3-reminder dunning + flat/percent Mahngebühr on 2nd & 3rd + AGB notice ([dcdbeb9](https://github.com/PicPeak/picpeak/commit/dcdbeb9cc50a888ff66e65c62597fcc84c2c8f17))
|
||||
* **crm:** add event_reminder_* templates to dev email tester ([6d302e7](https://github.com/PicPeak/picpeak/commit/6d302e79983f73696f24ab1dfa71fd7f4f6345ca))
|
||||
* **crm:** allow negative line items for manual discount/Rabatt rows ([3d37324](https://github.com/PicPeak/picpeak/commit/3d373240802869ae3d181b9cf67d70335809408d))
|
||||
* **crm:** backend code services + routes + utilities + tests ([d543949](https://github.com/PicPeak/picpeak/commit/d543949188e34625f7d0fa93606ad6cb22553b0b))
|
||||
* **crm:** cash-basis revenue + backdatable payment date on mark-paid ([82ec238](https://github.com/PicPeak/picpeak/commit/82ec23824a3e48ef3a2abd4c52f5564c07115511))
|
||||
* **crm:** country dropdown + name guard for customer create/edit ([db2c482](https://github.com/PicPeak/picpeak/commit/db2c482ae9d1049960df443c1e224a86b6e8ff2f))
|
||||
* **crm:** cross-link to CRM settings from quote + invoice editors ([d7f0488](https://github.com/PicPeak/picpeak/commit/d7f0488f6e6c99526075c83e16e138f03ef977f2))
|
||||
* **crm:** event-type dropdown on quotes; quote’event uses it (no more hardcoded 'wedding') ([f78671f](https://github.com/PicPeak/picpeak/commit/f78671fc6c8d234be4dee87b45aae9d280a3a6f7))
|
||||
* **crm:** Finder-style sortable column headers, default sort by issue date ([d9251c0](https://github.com/PicPeak/picpeak/commit/d9251c085039d35769aba1489aaab6eb95adbb20))
|
||||
* **crm:** frontend code pages + services + components ([a7e16e7](https://github.com/PicPeak/picpeak/commit/a7e16e7bf668ff06158f95e13843413d43a55cd4))
|
||||
* **crm:** i18n EN + DE for CRM, machine fr/nl/pt/ru fallbacks ([409d414](https://github.com/PicPeak/picpeak/commit/409d41403557b28560380a9badfb4c576d1df330))
|
||||
* **crm:** Mahngebühr on a separate Mahnung document; invoice stays immutable ([5ed2fec](https://github.com/PicPeak/picpeak/commit/5ed2fec2fe5cd5c2c8db6ea83c3b791313618e0f))
|
||||
* **crm:** per-customer Skonto opt-out ([d788a6c](https://github.com/PicPeak/picpeak/commit/d788a6cde50a4146123bc7efadca314d6916c2a1))
|
||||
* **crm:** pre-event reminder falls back to the assigned customer account ([3ccaed0](https://github.com/PicPeak/picpeak/commit/3ccaed06a226cdc4a18399f8daa9b2d420e3684b))
|
||||
* **crm:** Project Overview phase 1 projects schema ([efa47d6](https://github.com/PicPeak/picpeak/commit/efa47d697d4c007f27c12f4f33eb62ef64e09e78))
|
||||
* **crm:** Project Overview phase 2 project service + routes ([eb26313](https://github.com/PicPeak/picpeak/commit/eb263137b98935754155824de2a03848121304b6))
|
||||
* **crm:** Project Overview phase 3 persist sent email HTML ([874c91f](https://github.com/PicPeak/picpeak/commit/874c91f944d8397edaf9f48091bab3bf5cfc30e1))
|
||||
* **crm:** route billing docs to billing_email when set ([09c5110](https://github.com/PicPeak/picpeak/commit/09c5110d2b9cc8f2589731c60163897329ab4222))
|
||||
* **crm:** toggle for VAT on late fees (jurisdiction-dependent) ([eaceb7e](https://github.com/PicPeak/picpeak/commit/eaceb7e71caa6466d8298c0fc84487f0f4af1dca))
|
||||
* **crm:** unlock reminderEmails feature flag in Features tab ([b064aab](https://github.com/PicPeak/picpeak/commit/b064aab8ef1230cfc5f42cbdb430e55676d96d3e))
|
||||
* **dashboard:** revenue "year" tile toggles 365 days ” calendar YTD ([d1c9e02](https://github.com/PicPeak/picpeak/commit/d1c9e02bcf50b6c08eebc85acdbfba29bfee84ac))
|
||||
* **email:** add 'Test connection' to incoming mail + tidy IMAP label ([f017649](https://github.com/PicPeak/picpeak/commit/f017649bd5072d6d23a251fedeba473fe0bf57bf))
|
||||
* **email:** hold relationship mail to business hours ([b378ad6](https://github.com/PicPeak/picpeak/commit/b378ad679f64d5be9491b2e5ec9bc0f7d3ef9484))
|
||||
* **email:** incoming mail (IMAP) intake - backend + standalone flag ([5645c30](https://github.com/PicPeak/picpeak/commit/5645c304ab876f42bf6187d624c256f07e62e482))
|
||||
* **email:** incoming mail UI - IMAP config block + Received emails tab ([31280e1](https://github.com/PicPeak/picpeak/commit/31280e1f7ab374f3ebd6e2b3efa5313cbde860ab))
|
||||
* **email:** per-weekday business hours + manual queue flush ([621ce94](https://github.com/PicPeak/picpeak/commit/621ce942b55cea528da894593e5ba2280fe70c4e))
|
||||
* **email:** read-only "Sent emails" tab over email_queue ([603ba1e](https://github.com/PicPeak/picpeak/commit/603ba1e504493b702815167cdbc22a4a892adef5))
|
||||
* **email:** round-trip test send via SMTP to the IMAP mailbox and confirm arrival ([04be51a](https://github.com/PicPeak/picpeak/commit/04be51a008d8e9e050557783fb2f5104e140847e))
|
||||
* **events:** "Create invoice" action on the event detail page ([a03146e](https://github.com/PicPeak/picpeak/commit/a03146edc9aefaeff02f73752a3ebfa16809c31b))
|
||||
* **events:** duplicate-gallery action ([#626](https://github.com/PicPeak/picpeak/issues/626)) ([e985d25](https://github.com/PicPeak/picpeak/commit/e985d25207671cbfefcdda9775a96eadf2fe0698))
|
||||
* **feedback:** export shape toggle per-action vs per-guest pivot ([#640](https://github.com/PicPeak/picpeak/issues/640) part E) ([fabd67a](https://github.com/PicPeak/picpeak/commit/fabd67aecd6caf308956e5b4cb9df7dd44452142))
|
||||
* **feedback:** per-guest favorite + like caps with mobile-friendly limit modal ([#655](https://github.com/PicPeak/picpeak/issues/655)) ([3ac7017](https://github.com/PicPeak/picpeak/commit/3ac70177efc237b8169278208983b0de3629bc72))
|
||||
* **feedback:** per-guest favorite + like caps with mobile-friendly limit modal ([#655](https://github.com/PicPeak/picpeak/issues/655)) ([f2814e4](https://github.com/PicPeak/picpeak/commit/f2814e4a4ce3aa9affc232243d615a15a1aae0c0))
|
||||
* **gallery:** publish notifies assigned customer accounts via the account email ([c657892](https://github.com/PicPeak/picpeak/commit/c657892bc87f44e854827cb8a65f87cc528a2f71))
|
||||
* **hours:** aggregate open-hours landing view on /admin/clients/hours ([93956db](https://github.com/PicPeak/picpeak/commit/93956db0caa4ad8a1ddb8d68c30f0912214715e8))
|
||||
* **hours:** install-wide default rate + inline missing-rate CTA ([ab6bad1](https://github.com/PicPeak/picpeak/commit/ab6bad17c914efbee944e2941ce862f47db302ff))
|
||||
* **hours:** open the hours invoice in the editor to add items ([02742b3](https://github.com/PicPeak/picpeak/commit/02742b3163dc70af4a799a27dbb99a9e6fa8094a))
|
||||
* **i18n:** add Slovenian (sl) language support ([433af15](https://github.com/PicPeak/picpeak/commit/433af1514687b5c103e72db800954f96fd42b9b8))
|
||||
* **i18n:** add Slovenian (sl) language support ([37cc363](https://github.com/PicPeak/picpeak/commit/37cc3631d8285ba9d72f0d01f37267a903f2d3e7))
|
||||
* **installer:** install picpeak directly from a backup via trigger file ([83fdb47](https://github.com/PicPeak/picpeak/commit/83fdb47fbf11081a08c96d088ada00b2ab36830e))
|
||||
* **invoices:** optional sub-cent rounding reconciliation ("Rundung" row) ([4670292](https://github.com/PicPeak/picpeak/commit/4670292139bf4c5ad523646f38b98b9d47ab3430))
|
||||
* **invoices:** surface monthly/manual accumulator drafts in the Bills list ([e457656](https://github.com/PicPeak/picpeak/commit/e457656b9d06bb420c9d0985fe15c30d6c88aed9))
|
||||
* **lightbox:** multi-photo Web Share save-to-Photos on iOS ([#557](https://github.com/PicPeak/picpeak/issues/557)) ([d5823c7](https://github.com/PicPeak/picpeak/commit/d5823c79d9a187461c0126adcff7f4374cd0e8aa))
|
||||
* Live Slideshow ("Diashow") fullscreen, auto-updating projector view for live events ([4356393](https://github.com/PicPeak/picpeak/commit/4356393b4433dd6b4147388688766b9464294c89))
|
||||
* **projects:** attach-event control in the cockpit ([dffcf62](https://github.com/PicPeak/picpeak/commit/dffcf6269fe0416d7233d973a4162874337fbb9a))
|
||||
* **projects:** flag re-rendered emails in the feed ([94f2c01](https://github.com/PicPeak/picpeak/commit/94f2c01590d52962c565eea5d6f47444ff0d5782))
|
||||
* **projects:** gate Project Overview behind a projects feature flag + cockpit email actions ([1bf0b34](https://github.com/PicPeak/picpeak/commit/1bf0b34ea5e280770e0262660586f345860b0325))
|
||||
* **projects:** gated project pickers on quote/contract/hours editors ([0175007](https://github.com/PicPeak/picpeak/commit/0175007abc675ecb18a30e05241cac62bee833f8))
|
||||
* **projects:** link quotes & contracts to a project (precise cockpit rollup) ([6420047](https://github.com/PicPeak/picpeak/commit/6420047e7cda046057d27539b85334874081b51d))
|
||||
* **projects:** linking a quote/contract cascades the whole deal into the project ([a702f33](https://github.com/PicPeak/picpeak/commit/a702f33004996ca53f77c9177cb50a6504410801))
|
||||
* **projects:** Project Overview cockpit link (multiple) quotes/contracts/hours into projects ([58f93ae](https://github.com/PicPeak/picpeak/commit/58f93ae71350cc4a100f15a1a11f478750dace91))
|
||||
* **projects:** Project Overview cockpit UI + CRM nav entry ([81553aa](https://github.com/PicPeak/picpeak/commit/81553aa0e3476e7fdd2d6fcda7ebfa1f1d7c9b57))
|
||||
* **projects:** rolled-up project value (newest stage wins per deal, cumulative) ([7ca2437](https://github.com/PicPeak/picpeak/commit/7ca243780a2165b28583a44632468fd05c4ed115))
|
||||
* **quotes:** admin decline-on-behalf with optional reason ([8d14441](https://github.com/PicPeak/picpeak/commit/8d14441df492ac46235de247f59500da3eedfc2e))
|
||||
* **restore:** docker-logs visibility + ADMIN_CREDENTIALS.txt restore notice ([3322a1d](https://github.com/PicPeak/picpeak/commit/3322a1d998bedf39274dbb473b44e7b1e7cbff51))
|
||||
* **restore:** self-heal restore_allow_force default ON at boot ([dbcecfe](https://github.com/PicPeak/picpeak/commit/dbcecfe2aa6629a0665150e56c6306287c6fd225))
|
||||
* **slideshow:** add image fit setting (fill vs black bars) ([b5c73e0](https://github.com/PicPeak/picpeak/commit/b5c73e05bd41b262f864e8c700b1d38582b3817f))
|
||||
* **slideshow:** admin ui for live slideshow ([385b05a](https://github.com/PicPeak/picpeak/commit/385b05adcf6a4acb7939e372328a55df7dae5e08))
|
||||
* **slideshow:** backend api for live slideshow ([dea5e0f](https://github.com/PicPeak/picpeak/commit/dea5e0f8a6421c056868c2d9bea11e5bf1ee106a))
|
||||
* **slideshow:** db columns for live slideshow ([1029dd0](https://github.com/PicPeak/picpeak/commit/1029dd05bdb9ca0a97ad86100145221850648651))
|
||||
* **slideshow:** en/de strings for live slideshow ([cb761ee](https://github.com/PicPeak/picpeak/commit/cb761ee621aa553cf210c4224b6cbbf7bf2ef0cb))
|
||||
* **slideshow:** gate behind a feature flag + move globals to a Settings tab ([69367b4](https://github.com/PicPeak/picpeak/commit/69367b45be1c13d87e73e72da34a1f41a5849dfe))
|
||||
* **slideshow:** public fullscreen slideshow viewer ([fd02254](https://github.com/PicPeak/picpeak/commit/fd02254f78bd1860780355ebaa68293d58ce18b3))
|
||||
* **whatsapp:** admin-selectable template parameters + reorder ([#647](https://github.com/PicPeak/picpeak/issues/647) follow-up) ([80e8ec5](https://github.com/PicPeak/picpeak/commit/80e8ec5bc71f0653d56f1087521f5207aee0ba8f))
|
||||
* **whatsapp:** admin-selectable template parameters + reorder ([#647](https://github.com/PicPeak/picpeak/issues/647) follow-up) ([16055cd](https://github.com/PicPeak/picpeak/commit/16055cdc413f0aa560c2b2a792b4e2ae8f5cbfd3))
|
||||
* **whatsapp:** WhatsApp Business API notification channel ([#640](https://github.com/PicPeak/picpeak/issues/640) part D) ([78c8e9d](https://github.com/PicPeak/picpeak/commit/78c8e9d9f91d56e07e04df4ed90fb05ccdfb69d2))
|
||||
* **workflows:** 'Clean up layout' auto-arrange button (dagre) ([79607c5](https://github.com/PicPeak/picpeak/commit/79607c597af07ca5b78a689469c3ffefc3699317))
|
||||
* **workflows:** add workflows feature flag + Features-tab toggle ([ff47861](https://github.com/PicPeak/picpeak/commit/ff478619b580096d4dfb46dd6ad751daead082fb))
|
||||
* **workflows:** admin CRUD + run-history + approvals-inbox API ([1a0d6de](https://github.com/PicPeak/picpeak/commit/1a0d6de04d3547ca0e34833befea200c2750e859))
|
||||
* **workflows:** admin review gates before sends + migrate lifecycle/time triggers ([fa7b1ba](https://github.com/PicPeak/picpeak/commit/fa7b1bae951222de506ab8a3c8aee158b471efd1))
|
||||
* **workflows:** advanced text mode export/import the flow as JSON ([289568f](https://github.com/PicPeak/picpeak/commit/289568fd52fcf0f33a959f074d215853ae37e48c))
|
||||
* **workflows:** approval gates email confirm/deny + token resume ([b48d8c2](https://github.com/PicPeak/picpeak/commit/b48d8c2eb8e278d3dad8a8afef221a640bcac919))
|
||||
* **workflows:** booking cutover wire booking actions + hold documents behind approval gates ([ec33ec7](https://github.com/PicPeak/picpeak/commit/ec33ec7670a4feb1108d1bcbfe34727f63cc8cf9))
|
||||
* **workflows:** collections-handoff block after dunning exhausts ([b78bd97](https://github.com/PicPeak/picpeak/commit/b78bd979dc4856a78d2022783537b8efd1297d27))
|
||||
* **workflows:** crash recovery resume runs orphaned mid-flow ([192d2cb](https://github.com/PicPeak/picpeak/commit/192d2cbc06a0295dbfdc35f05d192ae7ed5273e6))
|
||||
* **workflows:** data-touching action + condition handlers ([96fb440](https://github.com/PicPeak/picpeak/commit/96fb44045e49c4cbc9b221780f7c725f80751993))
|
||||
* **workflows:** emit lifecycle events from invoice + quote services ([cc0ba53](https://github.com/PicPeak/picpeak/commit/cc0ba5347d36161e3da2eaff3a1f2d56c582c4a5))
|
||||
* **workflows:** execution engine core + registry + tests ([1eaef67](https://github.com/PicPeak/picpeak/commit/1eaef67c36a1a1eae6d574d2d44f2a3bdfb43d4c))
|
||||
* **workflows:** hard cutover of gallery-expiry + dunning + pre-event to flows ([0b6c33e](https://github.com/PicPeak/picpeak/commit/0b6c33e59a2e1ba15210645a65800543eaf6305b))
|
||||
* **workflows:** implement prepare_event so booking_full/booking_simple are enableable ([4faf5a3](https://github.com/PicPeak/picpeak/commit/4faf5a344a8d6d03cd9f374e093cc9bd8317fa48))
|
||||
* **workflows:** implement remaining stub actions (prepare_quote, prepare_gallery, reserve_date) ([9414b42](https://github.com/PicPeak/picpeak/commit/9414b42b7fae9f5447c1879e9b2c34d05f7c888d))
|
||||
* **workflows:** invoice prepared+approved early, dispatch waits; daysBefore in editor; dashboard approvals ([182e655](https://github.com/PicPeak/picpeak/commit/182e655fcf0fa119714e6fd34cad5f33d0087045))
|
||||
* **workflows:** make approval rows clickable to open the underlying document ([7727b67](https://github.com/PicPeak/picpeak/commit/7727b6714b5654bab067b041ca9c33cf7d9270ab))
|
||||
* **workflows:** migrate the dunning ladder onto the engine (cutover) ([5259ee9](https://github.com/PicPeak/picpeak/commit/5259ee97053386a63e7bcdf2a5cae22842e5ceaa))
|
||||
* **workflows:** per-quote booking-workflow picker + quote’invoice (no gallery) built-in ([d14f1d8](https://github.com/PicPeak/picpeak/commit/d14f1d850cc995b2cb1119ba0424f123feba50ec))
|
||||
* **workflows:** pre-event reminder picks the template GROUP on the block, type stays automatic ([10d091b](https://github.com/PicPeak/picpeak/commit/10d091b55e0c44738b4001a71def6416a8f0aeb0))
|
||||
* **workflows:** React Flow canvas editor + list + approvals UI ([5c0396d](https://github.com/PicPeak/picpeak/commit/5c0396d0c1bf69ba48b42eacc6d8f145b901a299))
|
||||
* **workflows:** route webhook node through the delivery pipeline (full Option 1) ([675e41a](https://github.com/PicPeak/picpeak/commit/675e41a2f72c8c23fa5c36b13bc6b95abcb9d570))
|
||||
* **workflows:** scheduler resumes elapsed wait nodes ([610a3df](https://github.com/PicPeak/picpeak/commit/610a3dfd732fbf37c68bc3edacaed6c99610a2ab))
|
||||
* **workflows:** schema + permissions (migration 142) ([c818c25](https://github.com/PicPeak/picpeak/commit/c818c25cf2d7a9c9b281107a92528d5923758ab0))
|
||||
* **workflows:** seed booking + pre-event built-ins, wire event.date_approaching ([62ba905](https://github.com/PicPeak/picpeak/commit/62ba905464387784be7710610a65341569b68e46))
|
||||
* **workflows:** seed invoice-dunning ladder as an editable built-in flow ([9b557ef](https://github.com/PicPeak/picpeak/commit/9b557efbf347ba585ceac61cfc0b6b3038ef7de6))
|
||||
* **workflows:** test-fire safe dry-run of any flow on demand ([e70ddd3](https://github.com/PicPeak/picpeak/commit/e70ddd36b8e9558dc44fc118277539fe6e7425d7))
|
||||
* **workflows:** warn when disabling a built-in (reverts to legacy, not off) ([c5f131c](https://github.com/PicPeak/picpeak/commit/c5f131cec32826331722ef3705c5f5422e31726d))
|
||||
* **workflows:** wire booking document actions (prepare_invoice/contract + send_document) ([cf424ef](https://github.com/PicPeak/picpeak/commit/cf424efb4a3a5e0df3a4bb1c753ca24368446816))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **accounting:** 'Save & mark paid' actually pays; incoming invoices appear in tax/export ([3b70a09](https://github.com/PicPeak/picpeak/commit/3b70a09773f22e942ae80962b9b69a7712b08ff3))
|
||||
* **accounting:** address the-luap PR [#636](https://github.com/PicPeak/picpeak/issues/636) review ([707c5d0](https://github.com/PicPeak/picpeak/commit/707c5d027798bdafb9fe09d7efcbd9ea65330076))
|
||||
* **accounting:** always show Income/Costs/Result summary on tax page (even with zero costs) ([663daf5](https://github.com/PicPeak/picpeak/commit/663daf50ff92293adcc93aed42333eeba2d08849))
|
||||
* **accounting:** Banana export is now a tab-separated .txt (actually importable) ([a195067](https://github.com/PicPeak/picpeak/commit/a19506749a449ec0a628da776af5a5bea8a2e46e))
|
||||
* **accounting:** Banana I&E export uses the 'Category' column (not 'ContraAccount') ([53a16f9](https://github.com/PicPeak/picpeak/commit/53a16f9f6f9b11c224b3ff5f337f8a7fe4dbfc38))
|
||||
* **accounting:** distinguish Categorized (purple) from Paid (green) ([9514f5c](https://github.com/PicPeak/picpeak/commit/9514f5cb8eadd293d4c85a3849073b59ea93161a))
|
||||
* **accounting:** emit ISO dates in exports (Postgres returns Date objects) ([0c0fb29](https://github.com/PicPeak/picpeak/commit/0c0fb29770d7559b8b35a1b2a0aae1315485d875))
|
||||
* **accounting:** label the outgoing-invoice totals block in the tax summary ([f3e77e7](https://github.com/PicPeak/picpeak/commit/f3e77e78079c6869a3a5de062a90f1a04fecde3c))
|
||||
* **accounting:** lock company-expense to company, first-page categorise preview, auto-refresh inbox ([cee692c](https://github.com/PicPeak/picpeak/commit/cee692c10a1a96ada00a62dbcfc9f998af2c53f7))
|
||||
* **accounting:** migration 127 must not insert created_at/updated_at into app_settings ([31867ef](https://github.com/PicPeak/picpeak/commit/31867efcb9b9c4f19ca8a7e59dfcbd8eb6157525))
|
||||
* **accounting:** PDF pager always shown, click categorized’pay, drop duplicate Paid chip ([5fcb96c](https://github.com/PicPeak/picpeak/commit/5fcb96c723a3e5bdf2e93ff3786dfb7ba77b3d24))
|
||||
* **accounting:** PR [#622](https://github.com/PicPeak/picpeak/issues/622) blockers CSV formula injection + IMAP double-ingest race ([cd6d578](https://github.com/PicPeak/picpeak/commit/cd6d57839b4753b2848620c5960332cc945580ce))
|
||||
* **accounting:** PR [#622](https://github.com/PicPeak/picpeak/issues/622) concerns flag-cache, customer master gate, VAT-unconfigured, helpers, page cap ([a93b6dc](https://github.com/PicPeak/picpeak/commit/a93b6dc232375e1362e091c8868a409b1335dcae))
|
||||
* **accounting:** tax report 500 on Postgres drop SQL date() from cost queries ([ea8f6bc](https://github.com/PicPeak/picpeak/commit/ea8f6bc88a4d4ed39c93f80bcfcfbab283fca230))
|
||||
* **accounting:** tax report cost side queried a non-existent column ([ab65a47](https://github.com/PicPeak/picpeak/commit/ab65a470a009d33558a7167dd2c3c649f785e686))
|
||||
* **accounting:** tax report degrades gracefully if cost side fails (+ surface the error) ([9f85111](https://github.com/PicPeak/picpeak/commit/9f8511114a78c4c6bca2666b9c59e8325fc66dfb))
|
||||
* **accounting:** tax-report storno totals + hours-line date on Postgres ([db9e41d](https://github.com/PicPeak/picpeak/commit/db9e41d19846b31b29c5c1be2ee06a7958bb43b0))
|
||||
* **accounting:** tidy the tax-export scope selector styling ([8deb7e0](https://github.com/PicPeak/picpeak/commit/8deb7e0741a5bf559cb9f9b78350821dc84bdb53))
|
||||
* **accounting:** UTF-8 BOM on the ledger export so Banana reads it correctly ([74144da](https://github.com/PicPeak/picpeak/commit/74144da45fc0a7a2c2e88d17a23b584ba77e9262))
|
||||
* **admin-header:** hide wordmark on <sm when logo also shows ([#523](https://github.com/PicPeak/picpeak/issues/523)) ([c246fd3](https://github.com/PicPeak/picpeak/commit/c246fd3cc89962d626218029ab3da1346a726246))
|
||||
* **admin-header:** skeleton brand block + move LanguageSelector into profile menu on <sm ([#523](https://github.com/PicPeak/picpeak/issues/523) follow-up) ([b48b5b0](https://github.com/PicPeak/picpeak/commit/b48b5b0000fd95bc149335614eb062dd373fc50a))
|
||||
* **admin-header:** skeleton brand block + move LanguageSelector into profile menu on <sm ([#523](https://github.com/PicPeak/picpeak/issues/523) follow-up) ([fe10191](https://github.com/PicPeak/picpeak/commit/fe10191b82546473f035435731bf6d6ecca2efd6))
|
||||
* **admin-header:** truncate long company names on narrow widths ([#523](https://github.com/PicPeak/picpeak/issues/523) regression) ([e7cf834](https://github.com/PicPeak/picpeak/commit/e7cf834325e8686613fbbee78d52213cb3ba98b1))
|
||||
* **admin-ui:** backup download button hits API path, not SPA route ([ed7ab61](https://github.com/PicPeak/picpeak/commit/ed7ab61b90aac95da132e74468cf19ef7f0f8a46))
|
||||
* **admin/events:** delete cascade orphaned photo folders because it read a non-existent column ([#608](https://github.com/PicPeak/picpeak/issues/608)) ([284680e](https://github.com/PicPeak/picpeak/commit/284680e0357db20177e45ab4ab01de0fbcac2a98))
|
||||
* **admin/events:** delete cascade orphaned photo folders because it read a non-existent column ([#608](https://github.com/PicPeak/picpeak/issues/608)) ([457c956](https://github.com/PicPeak/picpeak/commit/457c9563869156bc4773d873661a75d5115b25db))
|
||||
* **admin/exports:** Lightroom TXT export joins with comma + drops extension ([#623](https://github.com/PicPeak/picpeak/issues/623)) ([a239fec](https://github.com/PicPeak/picpeak/commit/a239fec9d7b6c01c9649c075a40427b8844f83b8))
|
||||
* **admin:** graceful logo-img fallback + show sidebar widgets during perm hydration ([#523](https://github.com/PicPeak/picpeak/issues/523) follow-up 2) ([f51b9cf](https://github.com/PicPeak/picpeak/commit/f51b9cf8df2dfba07590b35cc63def689df98c4a))
|
||||
* **admin:** logo-img fallback + sidebar perm hydration + filename NFD transliteration ([#523](https://github.com/PicPeak/picpeak/issues/523) follow-up 2, [#607](https://github.com/PicPeak/picpeak/issues/607)) ([fcd3ca3](https://github.com/PicPeak/picpeak/commit/fcd3ca36c659eafa47c036f622da8114433b1c74))
|
||||
* **admin:** stack publish-gallery dialog CTAs so the German label fits ([#670](https://github.com/PicPeak/picpeak/issues/670)) ([748af98](https://github.com/PicPeak/picpeak/commit/748af98f3d3f8c00695b82e94d741a0e10a39a81))
|
||||
* **admin:** stack publish-gallery dialog CTAs so the German label fits ([#670](https://github.com/PicPeak/picpeak/issues/670)) ([ea2852d](https://github.com/PicPeak/picpeak/commit/ea2852dcb0a0f00318a2c8067405630bcff4eee6))
|
||||
* **analytics:** admin dashboard reads correct fields + Umami device API ([#661](https://github.com/PicPeak/picpeak/issues/661)) ([349f566](https://github.com/PicPeak/picpeak/commit/349f566e87b33c59f61eb28b8abc5f889e6285d6))
|
||||
* **analytics:** admin dashboard reads correct fields + Umami device API ([#661](https://github.com/PicPeak/picpeak/issues/661)) ([7534447](https://github.com/PicPeak/picpeak/commit/7534447b6c0df4290fd8dac12270673097096f1b))
|
||||
* **api/v1/events:** also honour require_password + branding defaults ([#592](https://github.com/PicPeak/picpeak/issues/592) follow-up) ([2d44b1a](https://github.com/PicPeak/picpeak/commit/2d44b1ab2d251a4fc752cfeb645cb2126c0da3b7))
|
||||
* **api/v1/events:** honour global devtools-detection default on create ([#592](https://github.com/PicPeak/picpeak/issues/592)) ([2304b25](https://github.com/PicPeak/picpeak/commit/2304b2562465f8c86c82f2155fbdce264e68fdb3))
|
||||
* **archives:** stream-extract restore for >2 GiB + preserve original_filename via manifest ([#640](https://github.com/PicPeak/picpeak/issues/640)) ([e4e79a0](https://github.com/PicPeak/picpeak/commit/e4e79a0b3a6d3ddbbc2f3cebdcadc89307147248))
|
||||
* **backup-dashboard:** show last SUCCESSFUL backup + last attempt separately ([155aa63](https://github.com/PicPeak/picpeak/commit/155aa631035ab62a1aed5ca052b7eb7c57b431e4))
|
||||
* **backup-history:** show Total + Other so per-row sums match the count ([7f7c8ee](https://github.com/PicPeak/picpeak/commit/7f7c8eee61f7a721e65c0409aaf2028e2fb58c37))
|
||||
* **backup-ui:** respect general_date_format + general_time_format ([09f6a1a](https://github.com/PicPeak/picpeak/commit/09f6a1af6acfce5ef0da173fb3c17a16bb679047))
|
||||
* **backup:** include storage/business-docs/ in the in-app backup walker ([a9280ea](https://github.com/PicPeak/picpeak/commit/a9280ea9bac731199133a34ede5a89359bcde89e))
|
||||
* **backup:** inline DB dump + fail-loud guard so "Run Backup Now" can't ship files-only ([7fdf01a](https://github.com/PicPeak/picpeak/commit/7fdf01ad21da70ae534867e15ae2af1afd4899f4))
|
||||
* **backup:** inline DB dump + fail-loud guard so "Run Backup Now" can't ship files-only ([7c230bd](https://github.com/PicPeak/picpeak/commit/7c230bdc242fa99e12e42c5fb6ee9202243a36e7))
|
||||
* **bills:** localize the event_date on the invoice detail card ([095edfe](https://github.com/PicPeak/picpeak/commit/095edfe06d7d251f608dcf05b7f0a48397c84430))
|
||||
* **branding+whatsapp:** preserve customCss through preset switches ([#645](https://github.com/PicPeak/picpeak/issues/645)) + admin-pinned WhatsApp template language ([#647](https://github.com/PicPeak/picpeak/issues/647)) ([cde028e](https://github.com/PicPeak/picpeak/commit/cde028e9199a9ddb09957a87590732f4bd4d7a7b))
|
||||
* **branding:** accept SVG favicons ([1259155](https://github.com/PicPeak/picpeak/commit/12591556a01f3803cf326a1c251a9309d6e13734))
|
||||
* **branding:** allow larger square favicons ([11257a7](https://github.com/PicPeak/picpeak/commit/11257a7936c3cc6a786f4ffe91ad3744f0d97600))
|
||||
* **branding:** dark logo in the Branding live preview ([4d3da35](https://github.com/PicPeak/picpeak/commit/4d3da35168e767714d710ad499e16437f497aaaf))
|
||||
* **branding:** dark-mode logo in the admin sidebar ([7d34c97](https://github.com/PicPeak/picpeak/commit/7d34c97c584eb5e9c56ca1535d8afa8e6564d328))
|
||||
* **branding:** force lock = light/dark only; Branding stays the full preset, galleries hide color+mode ([a7c1913](https://github.com/PicPeak/picpeak/commit/a7c19135bb9645a7f95d5fe76581098db305394f))
|
||||
* **branding:** point HTML favicon link at /favicon.ico (the real Safari fix) ([c60e34e](https://github.com/PicPeak/picpeak/commit/c60e34ecae5eadcde47aebcb1c3b32741be576ff))
|
||||
* **branding:** preserve customCss through preset switches + theme changes ([#645](https://github.com/PicPeak/picpeak/issues/645)) ([7cf2679](https://github.com/PicPeak/picpeak/commit/7cf26795ec12845743a30d48956381f25c6e181c))
|
||||
* **branding:** serve favicon via backend route so Safari picks it up ([db3e327](https://github.com/PicPeak/picpeak/commit/db3e3270f311c31d2e6bfad7c0a5e5c204a2fedc))
|
||||
* **branding:** stream favicon bytes directly (Safari ignores the 302) ([7ccfdc1](https://github.com/PicPeak/picpeak/commit/7ccfdc1aea564b7d056a2e75385c6534c1729b0b))
|
||||
* **branding:** SVG (and .ico) favicons now render ([a6e6ef7](https://github.com/PicPeak/picpeak/commit/a6e6ef7b83796ced497f1093ce010b5c5cc5526c))
|
||||
* **branding:** theme-aware logo across all login / auth entry pages ([0b4b5cf](https://github.com/PicPeak/picpeak/commit/0b4b5cf46ee5c99e440dbad08b1e42d337dc1d57))
|
||||
* **branding:** theme-aware logo on customer-facing public pages ([05c1e8d](https://github.com/PicPeak/picpeak/commit/05c1e8d18ba1e2029e2da62d6ffb4c701b725660))
|
||||
* **branding:** use dark-mode logo on the admin login page ([307b84f](https://github.com/PicPeak/picpeak/commit/307b84fe05d679d1d3c4d7a2a48a6d7b24ef496c))
|
||||
* **branding:** when a force lock is active, collapse the theme customizer to just the Force control ([1ac653a](https://github.com/PicPeak/picpeak/commit/1ac653ad1b9f47af8cb24cb53ffa60a1e95192fc))
|
||||
* **bug-batch:** [#523](https://github.com/PicPeak/picpeak/issues/523) [#564](https://github.com/PicPeak/picpeak/issues/564) [#590](https://github.com/PicPeak/picpeak/issues/590) [#591](https://github.com/PicPeak/picpeak/issues/591) [#592](https://github.com/PicPeak/picpeak/issues/592) ([c68a03c](https://github.com/PicPeak/picpeak/commit/c68a03c20e70b8049ed851d41e20143813935a3a))
|
||||
* **business-profile:** align business-hours time columns ([f4af290](https://github.com/PicPeak/picpeak/commit/f4af290fa03b626fcb84a7d64d334ee6ad9b96c7))
|
||||
* **business-profile:** honor 24h time format in business-hours pickers ([2723b3f](https://github.com/PicPeak/picpeak/commit/2723b3f29ea41e43184920d04eaac2a955cdd45f))
|
||||
* **business-profile:** setting-aware custom time field for business hours ([2149f38](https://github.com/PicPeak/picpeak/commit/2149f38cd19ff8b8d04cccc632639987cec3a668))
|
||||
* **business-profile:** use the app-standard de-DE lang hint for 24h time ([e1d9d06](https://github.com/PicPeak/picpeak/commit/e1d9d06ae9bda82f2b6c915e8450787517abee95))
|
||||
* **crm:** admin surfaces follow the admin light/dark toggle, not the gallery theme ([#620](https://github.com/PicPeak/picpeak/issues/620)) ([d3266a0](https://github.com/PicPeak/picpeak/commit/d3266a0d1c458e8ae9c57ccd2f650e699544d2d6))
|
||||
* **crm:** anchor imported invoice dates to issue_date, not import time ([c6b8cc9](https://github.com/PicPeak/picpeak/commit/c6b8cc9199fc107ac4ba8e1899dc8b066aa3b5d5))
|
||||
* **crm:** commit LocalizedDateInput value live, not only on blur ([0b4690a](https://github.com/PicPeak/picpeak/commit/0b4690afabe75a906bea6240241e7a285c1107b4))
|
||||
* **crm:** country dropdown on customer onboarding, placed after State/region ([18ffff2](https://github.com/PicPeak/picpeak/commit/18ffff29c3f3da4a9ef49cc29fa70ab50131d5e9))
|
||||
* **crm:** country dropdown on customer profile billing address too ([fe56d24](https://github.com/PicPeak/picpeak/commit/fe56d24a6b4cc0b191e910a76c0d2c0c58307df8))
|
||||
* **crm:** drop redundant 'Country (full name)' field ([a2b5ae1](https://github.com/PicPeak/picpeak/commit/a2b5ae17f3014036354f91f8924a5e5c02dbf98e))
|
||||
* **crm:** editor totals box computed VAT 100× too small ([e9b297c](https://github.com/PicPeak/picpeak/commit/e9b297c162a19da31d53de377b90bfd5cda1b0a7))
|
||||
* **crm:** localize scheduled-send + installment date + timezone picker ([43b10f9](https://github.com/PicPeak/picpeak/commit/43b10f91c05818ad244f64284aef6b83b0319214))
|
||||
* **crm:** make 'Configure defaults in Settings' link navigate in-app ([7b36582](https://github.com/PicPeak/picpeak/commit/7b36582ef5aa6cf2ecc9bd1cc037407d48781bd3))
|
||||
* **crm:** offer full ISO 3166-1 country list in pickers ([615ef75](https://github.com/PicPeak/picpeak/commit/615ef757d3dc7cf0a1350c1c82e17c9515b74c2d))
|
||||
* **crm:** PR [#603](https://github.com/PicPeak/picpeak/issues/603) review follow-ups + Outlook-proof email design ([a2b2d3f](https://github.com/PicPeak/picpeak/commit/a2b2d3fb313f347bac505b5d1846dce2b679ce55))
|
||||
* **crm:** pre-event reminder passes raw event_date (fixes "Invalid Date" in the email) ([250b240](https://github.com/PicPeak/picpeak/commit/250b240337733362cb9a74b248ac78b6e9347bf7))
|
||||
* **crm:** pre-event reminder resolves recipient from the event row, not a non-existent column ([5fbe514](https://github.com/PicPeak/picpeak/commit/5fbe514db6e386eee2eeade548bccbb5bbc5b422))
|
||||
* **crm:** quote’event fallback resolves an ACTIVE event type, never hardcoded 'wedding' ([2309812](https://github.com/PicPeak/picpeak/commit/23098127a83fb12f6a32809666ec93eef9ac90cb))
|
||||
* **crm:** recent-activity email placeholder + customer-dashboard locale dates ([ea09a86](https://github.com/PicPeak/picpeak/commit/ea09a86d0505b08f38e70be0c8717df414144a75))
|
||||
* **crm:** recognise imported-invoice revenue on issue_date, not paid_at ([5e79c69](https://github.com/PicPeak/picpeak/commit/5e79c69cda93c2aef8176768d29c5ea47a95c90d))
|
||||
* **crm:** respect general_date_format on all admin date inputs ([840df52](https://github.com/PicPeak/picpeak/commit/840df525817f1bcfa65dbf1fd47e4adbe349c13c))
|
||||
* **crm:** self-heal missing CRM email templates at boot + recover queue ([83933ba](https://github.com/PicPeak/picpeak/commit/83933baeecdc7e0272f2da0ff79fb1fb33bea114))
|
||||
* **crm:** thread trx through sequence-claim sites to unblock SQLite ([d1aecaa](https://github.com/PicPeak/picpeak/commit/d1aecaa1804c0039744eb79a4032d1ed923e0b85))
|
||||
* **csp:** external bootstrap script to survive strict reverse-proxy CSP ([#564](https://github.com/PicPeak/picpeak/issues/564)) ([dcc629c](https://github.com/PicPeak/picpeak/commit/dcc629cad23ce0ca89aabb6f8b1eacfde599774e))
|
||||
* **database-backup:** Postgres-safe insert destructure (runs the inline dump) ([f741e88](https://github.com/PicPeak/picpeak/commit/f741e88acbaf6135be575dc7f42b80bce735abad))
|
||||
* **date-input:** render pg full-ISO dates in the configured format ([f3a6c89](https://github.com/PicPeak/picpeak/commit/f3a6c8940aa705d336cca4e9695e5acec6d44a89))
|
||||
* **deps:** bump qs/brace-expansion overrides + add uuid override for node-cron ([d705059](https://github.com/PicPeak/picpeak/commit/d705059d3c2904184f037bbe0208fe128fdb9b63))
|
||||
* **docker:** chown /backup mount to nodejs on container startup ([3ab3756](https://github.com/PicPeak/picpeak/commit/3ab3756a56dc8c3bcd517d2d60c7ffd10688a945))
|
||||
* **downloads:** transliterate accented characters in filename via NFD instead of dropping them ([#607](https://github.com/PicPeak/picpeak/issues/607)) ([620163f](https://github.com/PicPeak/picpeak/commit/620163f2db77cda40b81edcac79a32cbb4fd278f))
|
||||
* **email:** always log incoming mail to received_emails (was lost on insert error) ([9c18dcf](https://github.com/PicPeak/picpeak/commit/9c18dcf377fca1e3650b0e20c926ecd7728aec9a))
|
||||
* **email:** fail-fast IMAP timeouts + manual 'Check now' poll ([8a54c6f](https://github.com/PicPeak/picpeak/commit/8a54c6f6b115513ba88a51dea43fad5f8e114c86))
|
||||
* **email:** guard round-trip test when IMAP username isn't an email ([e258472](https://github.com/PicPeak/picpeak/commit/e258472391b7f91b07a916b7edb6ecc5e5c3c048))
|
||||
* **email:** IMAP Security dropdown auto-fills the conventional port ([bd402d2](https://github.com/PicPeak/picpeak/commit/bd402d2e89bcb88b1cabdcf3a59a206116a968f9))
|
||||
* **email:** IMAP Security dropdown matches outgoing no port in label, manual port ([d04a697](https://github.com/PicPeak/picpeak/commit/d04a6978e9c5df0af5c570df8f35a1a690a0ae9c))
|
||||
* **email:** log all received mail, not just unseen (90-day lookback + dedup) ([c36797d](https://github.com/PicPeak/picpeak/commit/c36797db2db265ad49049c06cee543b1b528a759))
|
||||
* **email:** mark required fields on incoming mail to match outgoing SMTP ([fb48ba4](https://github.com/PicPeak/picpeak/commit/fb48ba4cb4cbd2ec5836fc3adaffb79ea8d20787))
|
||||
* **email:** match IMAP card to SMTP styling + auto-detect mailbox folders ([abb23f0](https://github.com/PicPeak/picpeak/commit/abb23f01c745d4285fbc07994c136a719a66b1d0))
|
||||
* **email:** preserve dots + subaddresses across all normalization sites ([de9a924](https://github.com/PicPeak/picpeak/commit/de9a924c77faebc2d0c1ff230a52d8da313259e8))
|
||||
* **email:** preserve dots + subaddresses across all normalization sites ([#574](https://github.com/PicPeak/picpeak/issues/574)) ([075b45f](https://github.com/PicPeak/picpeak/commit/075b45f02050a694937d42e85fac10d65bb574dd))
|
||||
* **email:** recover stuck queue reinit transporter on config save + manual flush ignores retry cap ([68c967f](https://github.com/PicPeak/picpeak/commit/68c967f9bbc388a3a4605a13d440389929e2561b))
|
||||
* **email:** resolve recipient language from the queue row's event_id, not just email_data ([10559fd](https://github.com/PicPeak/picpeak/commit/10559fd68e77eb00f3dd79366fcbb7880321e6b8))
|
||||
* **email:** surface the real error on test/save/flush instead of generic toast ([47edbf6](https://github.com/PicPeak/picpeak/commit/47edbf64b5a83c571df62a71b4c3525fe314abfe))
|
||||
* event-reminder, email-language & gallery-publish bugs surfaced during workflow testing ([c8714ca](https://github.com/PicPeak/picpeak/commit/c8714ca42f4d82d50fe611b2a630260ebecbe740))
|
||||
* **event-types:** renaming a type's slug cascades to events, quotes + reminder template ([415c93a](https://github.com/PicPeak/picpeak/commit/415c93a512f74898d0225ce2e9298f24cc12f60d))
|
||||
* **events:** preserve branding inheritance when saving events with null color_theme ([d5a37df](https://github.com/PicPeak/picpeak/commit/d5a37df2c41425511dc8a1f974088bebb768f0d5))
|
||||
* **events:** publish-from-draft email carries the real password ([#627](https://github.com/PicPeak/picpeak/issues/627)) ([83b568e](https://github.com/PicPeak/picpeak/commit/83b568ee2ddc007b7d981fd4b46b69810f0165c3))
|
||||
* **events:** wire customer notifications into both public API entry points ([#647](https://github.com/PicPeak/picpeak/issues/647)) ([f017542](https://github.com/PicPeak/picpeak/commit/f01754247cdb94c5935ad5abbda116841f6c7fba))
|
||||
* **events:** wire customer notifications into both public API entry points ([#647](https://github.com/PicPeak/picpeak/issues/647)) ([511d647](https://github.com/PicPeak/picpeak/commit/511d647eec656cd223c029a9455420fc0621cc80))
|
||||
* **flags:** close CRM/accounting feature-gating gaps from the audit ([03fa3d8](https://github.com/PicPeak/picpeak/commit/03fa3d82962d6d6f3cd9630e01258013d567865e))
|
||||
* **gallery:** admin edits to welcome_message land for returning guests ([#625](https://github.com/PicPeak/picpeak/issues/625)) ([ea6245c](https://github.com/PicPeak/picpeak/commit/ea6245cfdea67bd4668e2100f295433a3d29f7f1))
|
||||
* **gallery:** guest upload honours general_max_files_per_upload + i18n placeholder interpolates ([#613](https://github.com/PicPeak/picpeak/issues/613)) ([40a4aa2](https://github.com/PicPeak/picpeak/commit/40a4aa2d85d93c9dc1faa69f0e6f8524ff917e29))
|
||||
* **gallery:** guest upload honours general_max_files_per_upload + i18n placeholder interpolates ([#613](https://github.com/PicPeak/picpeak/issues/613)) ([69b5186](https://github.com/PicPeak/picpeak/commit/69b5186582d56c42cec520abbe5454171f9f666b))
|
||||
* **gallery:** leave a visible gap between filter bar and hero header ([#624](https://github.com/PicPeak/picpeak/issues/624)) ([178d6da](https://github.com/PicPeak/picpeak/commit/178d6dafb18cd4d30229d745a82af9ce27c41f08))
|
||||
* **gallery:** preserve per-viewer is_liked across hard refresh ([#590](https://github.com/PicPeak/picpeak/issues/590) follow-up) ([791e997](https://github.com/PicPeak/picpeak/commit/791e9974eb4c81cc4b095f9b604eccd708fb3a66))
|
||||
* **gallery:** publish dialog stuck for password-protected galleries with no inline email ([aa3471e](https://github.com/PicPeak/picpeak/commit/aa3471efe1629f36adeff8774dfdc379d4652e26))
|
||||
* **gallery:** toggle (not add) the local liked set on click ([#590](https://github.com/PicPeak/picpeak/issues/590)) ([d292b9f](https://github.com/PicPeak/picpeak/commit/d292b9fa10bffe5d751629b900c606763fa8e73a))
|
||||
* **gallery:** unbreak password entry in Instagram in-app browser ([#654](https://github.com/PicPeak/picpeak/issues/654)) ([6193ab7](https://github.com/PicPeak/picpeak/commit/6193ab7f6aafd94b6e2e432ddf170361fd306d4e))
|
||||
* **gallery:** unbreak password entry in Instagram in-app browser ([#654](https://github.com/PicPeak/picpeak/issues/654)) ([b1bfd48](https://github.com/PicPeak/picpeak/commit/b1bfd4838e7104e4f85695e180b20222206073ac))
|
||||
* **hours:** move logActivity out of the entry transactions (SQLite deadlock) ([348955b](https://github.com/PicPeak/picpeak/commit/348955b261713fc9f0b48391a1d4117f6f8c873f))
|
||||
* **i18n:** align quoteResponse.changeWithin DE placeholder with call site ([45f0606](https://github.com/PicPeak/picpeak/commit/45f0606ea318e21e43cb53f9674c1f7dd702e1e5))
|
||||
* **i18n:** honor general_time_format across all time displays ([2ef8376](https://github.com/PicPeak/picpeak/commit/2ef837680e2b3f3260685b962c9c5d7273d0f8bc))
|
||||
* **i18n:** replace ASCII quote with U+201D in DE perGuestLimitsDesc ([98e97e3](https://github.com/PicPeak/picpeak/commit/98e97e3cf214c96cdefd99bfedd6724f0b85c41c))
|
||||
* **i18n:** sweep activity-type translations + Events / API Tokens / Webhooks settings tabs ([f17c654](https://github.com/PicPeak/picpeak/commit/f17c654e146683683f347ae2cd46de9cf3e47989))
|
||||
* **i18n:** sweep activity-type translations + smart notification fallback ([bc8d333](https://github.com/PicPeak/picpeak/commit/bc8d3330bbe02041760063dcbf5cb5984945a25f))
|
||||
* **i18n:** sweep Events / API Tokens / Webhooks settings tabs ([997a412](https://github.com/PicPeak/picpeak/commit/997a41293ef7de9bdef1546634cb7e549f9c1331))
|
||||
* **i18n:** wrap WhatsApp token show/hide aria-label through t() ([a8bb7b4](https://github.com/PicPeak/picpeak/commit/a8bb7b439f6f57af9653ce283c951070bd52f3c2))
|
||||
* **invoices:** add bank transfer to the mark-paid method list ([e96ef4c](https://github.com/PicPeak/picpeak/commit/e96ef4c5a35bc9e575bc3419fb318a3ee9df1bd6))
|
||||
* **invoices:** anchor issue date + Skonto window to the actual send date ([45c7cc8](https://github.com/PicPeak/picpeak/commit/45c7cc80ab68d00d3dc9b84dcf5f29e5d918aef5))
|
||||
* **invoices:** auto-track due date from send date + payment term ([522cf2a](https://github.com/PicPeak/picpeak/commit/522cf2aa4a58a3126ce08c780ba46d4b53149f23))
|
||||
* **invoices:** badge held (unsent, no send date) invoices as "Draft" ([e4367e0](https://github.com/PicPeak/picpeak/commit/e4367e028a5228ef50c4bbd522d0777bc7340b52))
|
||||
* **invoices:** show "Draft" on the invoice detail page for accumulator drafts ([ca09442](https://github.com/PicPeak/picpeak/commit/ca0944293f66b6465a577340e63d592598915092))
|
||||
* **invoices:** show sub-cent Rundung in the editor totals preview ([c2bc2b0](https://github.com/PicPeak/picpeak/commit/c2bc2b098e6af3e984e5b06f42e21a8d9501349b))
|
||||
* **lightbox+events:** Android download lag, multi-photo Web Share re-land, theme branding inheritance ([e016f51](https://github.com/PicPeak/picpeak/commit/e016f510b6cc57a9ed1b59e2ee24fedd5d7097c3))
|
||||
* **lightbox:** eliminate download lag on Android by skipping the blob round-trip ([0479521](https://github.com/PicPeak/picpeak/commit/04795219a0b66fdd1ef73748d803adfdfc0d676f))
|
||||
* **lightbox:** restrict Web Share save-to-Photos path to iOS ([#554](https://github.com/PicPeak/picpeak/issues/554)) ([578397b](https://github.com/PicPeak/picpeak/commit/578397bc6b27b56ccf3bf1f2f244e0e0053c493a))
|
||||
* **lightbox:** restrict Web Share save-to-Photos path to iOS ([#554](https://github.com/PicPeak/picpeak/issues/554)) ([2a309c7](https://github.com/PicPeak/picpeak/commit/2a309c75a74be3af3eb67758f8d65f801ef3019a))
|
||||
* **maintenance:** enabling maintenance mode no longer locks admins out ([2493130](https://github.com/PicPeak/picpeak/commit/249313072b08ad79146b397bc08436e9de366d22))
|
||||
* **maintenance:** never block /admin/* with the maintenance screen ([fdde469](https://github.com/PicPeak/picpeak/commit/fdde4696e7025d7e41dd85eeda26b946f6713e13))
|
||||
* **migrations:** defer cross-table FKs in 107_crm_consolidated ([88a6b34](https://github.com/PicPeak/picpeak/commit/88a6b34c5e8a48c9e6419554b8f813ae02f2e519))
|
||||
* **nginx:** defensive large_client_header_buffers bump ([#591](https://github.com/PicPeak/picpeak/issues/591)) ([c83e883](https://github.com/PicPeak/picpeak/commit/c83e88348fbd473fb1de041cebabd3ace65d4d98))
|
||||
* **notifications:** restore /clear-all route the frontend already calls ([#597](https://github.com/PicPeak/picpeak/issues/597)) ([940fc60](https://github.com/PicPeak/picpeak/commit/940fc607400afa528f7f464c1d41541f46a4070d))
|
||||
* **notifications:** restore /clear-all route the frontend already calls ([#597](https://github.com/PicPeak/picpeak/issues/597)) ([29e63e5](https://github.com/PicPeak/picpeak/commit/29e63e5ce58b1850b422bba22f69664091104096))
|
||||
* **pdf:** correct multi-page invoice/quote layout + drop IBAN dup under Swiss QR ([2205b0b](https://github.com/PicPeak/picpeak/commit/2205b0bd687587ff2b54fbddb4770bf69a5ef3b2))
|
||||
* **pdf:** install fonts so SVG logo text rasterises correctly ([9454f43](https://github.com/PicPeak/picpeak/commit/9454f43eba3a65cf1aaeb2fb448f958abcce1a41))
|
||||
* **pdf:** version the logo rasterisation cache so the font fix takes effect ([a5011b1](https://github.com/PicPeak/picpeak/commit/a5011b1ea26803fec42349a10296afbec6989cfe))
|
||||
* **projects:** "one customer matches" rule for deal-lineage attach ([f74d8d4](https://github.com/PicPeak/picpeak/commit/f74d8d4e8cd9fa040e067ffd751b183a9673161b))
|
||||
* **projects:** address review cross-customer guards + email/queue hardening ([9d13880](https://github.com/PicPeak/picpeak/commit/9d13880f2b177a1a090c4685798e199a1f47b5ec))
|
||||
* **projects:** clickable milestones/feed, email rollup by customer, PG amount coercion ([c0b6d14](https://github.com/PicPeak/picpeak/commit/c0b6d14d08755f23665eaa8d52dd6a250d6c9074))
|
||||
* **projects:** enforce single-customer projects (guard event attach + re-label) ([4b1e85c](https://github.com/PicPeak/picpeak/commit/4b1e85c8555b03cbed4abbd80e9cb45b831df6bf))
|
||||
* **projects:** make email preview fully read-only (no clickable links) ([fa622cf](https://github.com/PicPeak/picpeak/commit/fa622cf2f87f447952b2e6e6e9d7fe60a1c14fb7))
|
||||
* **projects:** make the whole email row clickable (opens preview) ([84b4a5f](https://github.com/PicPeak/picpeak/commit/84b4a5f049a12bb22941dac733044d90a01fe052))
|
||||
* **projects:** only link cockpit rows when the target feature is enabled ([2369323](https://github.com/PicPeak/picpeak/commit/236932325971e23db17d6245d1ab2e9f2c1b4eec))
|
||||
* **projects:** render email preview with its own brand colors, not forced light ([b9a9c01](https://github.com/PicPeak/picpeak/commit/b9a9c018c0d2e0ff6c78ce0a1419ac28449043a4))
|
||||
* **projects:** scope 'book to project' to the current customer ([89bfb6c](https://github.com/PicPeak/picpeak/commit/89bfb6c5190ec0480168f9b59dc8ce5c2f104068))
|
||||
* **projects:** scope email rollup to CRM types + re-render unstored previews ([f02fba6](https://github.com/PicPeak/picpeak/commit/f02fba63325115fe416366c5d1c4f38900386cce))
|
||||
* **projects:** use real events.edit permission for project writes ([f71243e](https://github.com/PicPeak/picpeak/commit/f71243e388e12da840aa70193b4907af2866c039))
|
||||
* **projects:** wrap long URLs in email preview (no horizontal scroll) ([0cc52f3](https://github.com/PicPeak/picpeak/commit/0cc52f36938be2dc6c8a699afdc55d70831c02a9))
|
||||
* **quote-response:** compute minutes-remaining for the DE changeWithin string ([5ce0b6e](https://github.com/PicPeak/picpeak/commit/5ce0b6edc3fef41f2f22dd585a668f471ac47a2e))
|
||||
* **reminders:** wrap is_active/is_archived wheres in formatBoolean ([b9d9138](https://github.com/PicPeak/picpeak/commit/b9d91385b43de7ede508884f7cf78b5cf785f853))
|
||||
* **restore-wizard:** surface failure status, stop showing "completed at 0%" ([47ed690](https://github.com/PicPeak/picpeak/commit/47ed6907d141de883e95377665fdd61527bba107))
|
||||
* **restore-wizard:** warn on backups without a database dump ([989b42c](https://github.com/PicPeak/picpeak/commit/989b42c2f1c2cbf97c612fa790d1ae77d16e3626))
|
||||
* **restore:** coerce pg bigint counts to Number before comparing (PR [#596](https://github.com/PicPeak/picpeak/issues/596) round 2) ([354fbed](https://github.com/PicPeak/picpeak/commit/354fbed18220b47167b9bf6b11b3881fc120b7ae))
|
||||
* **restore:** default restore_allow_force=true + auto-upgrade existing installs ([c435263](https://github.com/PicPeak/picpeak/commit/c435263744cf6a23b6cd9e0466cc8af3f6c4894a))
|
||||
* **restore:** discover backups from disk, not just the DB ([f664fea](https://github.com/PicPeak/picpeak/commit/f664fea60ca223479b917abb7a256d4320f089e3))
|
||||
* **restore:** DROP/CREATE DATABASE needs explicit -d maintenance DB ([4c31a22](https://github.com/PicPeak/picpeak/commit/4c31a22626db47bbbffadd823ae5129ff079faad))
|
||||
* **restore:** evict active sessions before dropping target DB ([a39def6](https://github.com/PicPeak/picpeak/commit/a39def672ef054ed17fd2e65cec6ae90adf1d959))
|
||||
* **restore:** hoist preservedMeta above SQLite/PG split (PR [#596](https://github.com/PicPeak/picpeak/issues/596) blocker) ([a23fa3b](https://github.com/PicPeak/picpeak/commit/a23fa3bb12cd05a922c0fb860ae97ffd3fe2baff))
|
||||
* **restore:** move operator-meta replay after post-restore verification (PR [#596](https://github.com/PicPeak/picpeak/issues/596) round 3) ([20e3092](https://github.com/PicPeak/picpeak/commit/20e3092c146dd9151b6e7a370f885154f0adeecc))
|
||||
* **restore:** preserve operator-meta settings across restore ([e0ace08](https://github.com/PicPeak/picpeak/commit/e0ace0864e320d262b913dc9924e89fc940a41b3))
|
||||
* **restore:** re-init knex pool after DROP/CREATE DATABASE ([48e9c9c](https://github.com/PicPeak/picpeak/commit/48e9c9c79aa87b5e5450c76afd00b31de6597d6c))
|
||||
* **restore:** resolve 'local' source to backup_destination_path ([44c7935](https://github.com/PicPeak/picpeak/commit/44c7935b8483be6aa9282c158cfa0d026f301808))
|
||||
* **restore:** resolve local source + always rollback on failure ([5c0be66](https://github.com/PicPeak/picpeak/commit/5c0be66a14e4ad854b7e1325ff32a075b480cffd))
|
||||
* **restore:** set was_successful=true on the completed update ([7988c18](https://github.com/PicPeak/picpeak/commit/7988c189723fa4639413b3a5339c148521c92c11))
|
||||
* **safe-exec:** Node 22-compatible stdio + error-bridge for spawnTo/FromFile ([d34036c](https://github.com/PicPeak/picpeak/commit/d34036c4efd7769ef4896107cc53ea1a4cd1fa84))
|
||||
* **security:** block script execution in served SVGs via CSP ([807ae3d](https://github.com/PicPeak/picpeak/commit/807ae3d4fa69d4058a5f886b922efb570fb27227))
|
||||
* **security:** close BOLA on photo-export + NAT64 SSRF in URL guard ([b8211e9](https://github.com/PicPeak/picpeak/commit/b8211e9944da9e7b1c43a25e2f24c8a2425000cf))
|
||||
* **security:** close NAT64 SSRF + photo-export BOLA + sweep Trivy alerts (GHSA-wmjx-pc37-272r, GHSA-9v4w-jrhx-g5wr) ([6f40db8](https://github.com/PicPeak/picpeak/commit/6f40db859751efc2c931bc981a48148808fd3701))
|
||||
* **security:** re-apply SVG CSP on the direct favicon route (PR [#603](https://github.com/PicPeak/picpeak/issues/603) blocker) ([1214b6b](https://github.com/PicPeak/picpeak/commit/1214b6b762ce6c763b9a28389c17905d8e47d87f))
|
||||
* **settings:** don't insert non-existent created_at into app_settings ([8621338](https://github.com/PicPeak/picpeak/commit/8621338c489cbd5194da6ac22d1fe1bd9d730cb0))
|
||||
* **settings:** hoist tab-visibility useEffect above isLoading early return ([49bfb45](https://github.com/PicPeak/picpeak/commit/49bfb45332993b919ad4f949a0cd912a85888620))
|
||||
* **settings:** use CountrySelect for business-profile country (no more FL) ([c2d3f66](https://github.com/PicPeak/picpeak/commit/c2d3f663bc965287f4c050a7a069649d8f7c1d5d))
|
||||
* **slideshow:** deny display-only token on download/upload/feedback (PR [#646](https://github.com/PicPeak/picpeak/issues/646) review) ([e36b330](https://github.com/PicPeak/picpeak/commit/e36b3309ca66404d189d5b218cc1f0eba925e4c7))
|
||||
* **slideshow:** dip-to-white/black no longer flickers the image ([db8388c](https://github.com/PicPeak/picpeak/commit/db8388c79e44f5d254d984810bd62bfb11effd0f))
|
||||
* **slideshow:** drop updated_at from event writes ([1e40f82](https://github.com/PicPeak/picpeak/commit/1e40f8296ca59ff0395f6cc09ee452ab62653cdc))
|
||||
* **slideshow:** feature flag is a master kill-switch, not just admin UI ([759784a](https://github.com/PicPeak/picpeak/commit/759784a4d1cfe7e67c825293760169ad6904f090))
|
||||
* **slideshow:** fill the viewport instead of black bars ([6ec46de](https://github.com/PicPeak/picpeak/commit/6ec46de0e7bb821ea4e4a7fc2318792b810c3f36))
|
||||
* **slideshow:** read globals from app_settings, not the missing settings table ([0f4388d](https://github.com/PicPeak/picpeak/commit/0f4388d68ab85049c46e7af566d35f4fbf6e4d02))
|
||||
* **slideshow:** surface backend error in the live slideshow card ([056f938](https://github.com/PicPeak/picpeak/commit/056f9381de5dbe90243bea409b587b4910050cbf))
|
||||
* **test-infra:** scope databaseBackup fs.unlink stub so it doesn't leak ([3f5d006](https://github.com/PicPeak/picpeak/commit/3f5d006625fdbd8f34ad57d901dd55f543878e05))
|
||||
* **test-infra:** unref sessionTimeout cleanup interval so workers exit gracefully ([ecb2aea](https://github.com/PicPeak/picpeak/commit/ecb2aeacf9569bb2ea4d678a97c527234aefd159))
|
||||
* **test:** raise bootCrmDb beforeAll timeout on slideshow suites ([f4b6b89](https://github.com/PicPeak/picpeak/commit/f4b6b8941a30a20615cc87627a0663ff6d03c932))
|
||||
* **upload:** auto-throttle on low-memory hosts + correct documented RAM minimum ([#628](https://github.com/PicPeak/picpeak/issues/628)) ([714a9f6](https://github.com/PicPeak/picpeak/commit/714a9f6fb1f48ba1316cc240054d5128749581d8))
|
||||
* **whatsapp:** admin-pinned template language + Arabic locale support ([#647](https://github.com/PicPeak/picpeak/issues/647)) ([4fd7709](https://github.com/PicPeak/picpeak/commit/4fd7709596e7a0dd3fedef63772ddd52ce5561c9))
|
||||
* **workflows:** close review blockers prefetch-safe approvals + loud gate-edge failure ([98ab717](https://github.com/PicPeak/picpeak/commit/98ab717043e3fdefac0934bf8f4621d523b15e9a))
|
||||
* **workflows:** dark-mode canvas + readable nodes + structured config ([1734aba](https://github.com/PicPeak/picpeak/commit/1734aba39c199c8dee1b69e9933ddf57579f9d50))
|
||||
* **workflows:** defer quote.accepted/declined emit until the 15-min response window locks ([539a837](https://github.com/PicPeak/picpeak/commit/539a83711d1996dc9c262365f2c511e7bc445add))
|
||||
* **workflows:** harden graph validation + refuse enabling unimplemented flows ([d927464](https://github.com/PicPeak/picpeak/commit/d927464778272bd862aa01903179672f4d47368a))
|
||||
* **workflows:** held booking invoices are 'scheduled', not 'pending_delivery' so send_document can issue them ([882cfc0](https://github.com/PicPeak/picpeak/commit/882cfc0661b02602bae91b928a46ceea754f7f29))
|
||||
* **workflows:** make the dashboard pending-approvals card items clickable too ([6e20d58](https://github.com/PicPeak/picpeak/commit/6e20d58487c5e20b08e1d1b4ddd4e76f9e922a79))
|
||||
* **workflows:** matchFilter strict equality + accurate comment ([dee8d40](https://github.com/PicPeak/picpeak/commit/dee8d40bb3235a908bba514a97a62d3a91a6e131))
|
||||
* **workflows:** Postgres-safe id capture on workflow inserts ([cede885](https://github.com/PicPeak/picpeak/commit/cede885b04854fd667f65a19697505c0a7c52739))
|
||||
* **workflows:** ship built-ins disabled for first beta + enabled-based mutex + admin sentinel ([5893ecb](https://github.com/PicPeak/picpeak/commit/5893ecb27a0365a79ec04336c5a122b31d31db0e))
|
||||
* **workflows:** wire a real, SSRF-guarded webhook action (was a silent no-op) ([af7eea8](https://github.com/PicPeak/picpeak/commit/af7eea8b43e37905a79138bcde4b1026dea13050))
|
||||
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* **slideshow:** cache global settings to cut /state DB reads (PR [#646](https://github.com/PicPeak/picpeak/issues/646) review) ([a995131](https://github.com/PicPeak/picpeak/commit/a995131f4266e112c96c6e8cedd5158995ebe899))
|
||||
|
||||
|
||||
### Reverts
|
||||
|
||||
* **docker:** drop /backup chown from wait-for-db.sh ([5b3bfed](https://github.com/PicPeak/picpeak/commit/5b3bfed144e10a74c222b693095b55d77ee07816))
|
||||
|
||||
|
||||
### Documentation
|
||||
|
||||
* branch model + migration-to-org guide + PR template ([166ef47](https://github.com/PicPeak/picpeak/commit/166ef47611a248c4d517e26d390d87d21f077ca1))
|
||||
* branch model + migration-to-org guide + PR-template target hint ([d606fcd](https://github.com/PicPeak/picpeak/commit/d606fcd5a425fed3c968ec06b071a386bf558c28))
|
||||
* consolidate disaster-recovery into Backup & Restore guide ([43cb0ea](https://github.com/PicPeak/picpeak/commit/43cb0ea4bfc4f241a55d2681f14c064df6b87920))
|
||||
* **contributing:** note rebuild-after-package.json gotcha for dev compose ([2692e71](https://github.com/PicPeak/picpeak/commit/2692e71297925b7c117108fa9da9defe87dfe88e))
|
||||
* **crm:** legal/financial disclaimers examples only ([e7db0bb](https://github.com/PicPeak/picpeak/commit/e7db0bb8668a2cda9ee5469bcfb1a2e2cfd05403))
|
||||
* list CRM under Beta Features + note dev-compose rebuild gotcha ([1ed4804](https://github.com/PicPeak/picpeak/commit/1ed48046cbba1df3710cee197943521aedd1fe3d))
|
||||
* **readme:** add CRM + accounting to features, tax disclaimer, update contributor ([116743b](https://github.com/PicPeak/picpeak/commit/116743ba438505a52b021f80f678c5a0094d20d4))
|
||||
* **readme:** list CRM module under Beta Features with own-risk disclaimer ([c2dcd9c](https://github.com/PicPeak/picpeak/commit/c2dcd9ca840b9c1905e75bd9b4b31b5c0b75043d))
|
||||
* **release:** establish stable-channel cadence + promotion process ([e537923](https://github.com/PicPeak/picpeak/commit/e537923857b4b6000d715bba23a78f8685b44ee6))
|
||||
* **release:** establish stable-channel cadence + promotion process ([#565](https://github.com/PicPeak/picpeak/issues/565)) ([ab81998](https://github.com/PicPeak/picpeak/commit/ab819989960e7e7336a47ba93a0472bfbcb10efb))
|
||||
* **slideshow:** add Live Slideshow guide + README entries ([16013d1](https://github.com/PicPeak/picpeak/commit/16013d1cf9ad82ee052f905f9702feffde7b67eb))
|
||||
|
||||
---
|
||||
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
|
||||
Reference in New Issue
Block a user