What's new across all areas

What changed recently - newest first.

September 2026

CRM

  • A contact's appointment history is labelled

    The "Appointments" tab of the contact drawer carried no text anywhere, only the internal name the interface looks it up by - the heading, the error shown when loading fails, the hint for an empty history, the placeholder for an unknown appointment type, the unit behind the duration and all four status badges (confirmed, cancelled, needs rescheduling, no show). Two more places sat next to it: the "Uses" column of the ticket templates table and the name a screen reader announces for the button that removes an attachment from a reply. All eight places are now written down in German and English, and the duration carries a space between the number and the unit again.

  • Contact statistics stay up when the aggregate comes back empty

    The tile row above the

  • SELLERLOGIC direct links in a contact point at the right place again

    In the contact drawer

  • Contact merge now carries every history along

    Merging two contacts now also re-links

  • CSAT response rate now compares the same time window

    In CSAT analytics and the CSAT

  • Data export in the portal profile now shows errors

    The export button ("Export my data") on

  • Revenue estimate now shows Starter and Advanced MRR

    In the 12-month revenue forecast on

  • The call monitor stays connected

    The small window that shows incoming calls holds a

  • A candidate becomes a card in four guided steps, and the category is now mandatory

    the "Source" tab in portal management used to do nothing but list marked issues - getting from there to a customer-facing card was a manual trip through the card editor. There is now a Take in button and an assistant behind it: candidate, category, title and description per language, preview. Nothing is stored until the last step; abandoning it leaves no card behind. The internal issue title sits next to you throughout, visibly marked "Internal only", and is carried into no customer field - not even the preview, which comes from the same delivery path as the public roadmap and shows you how a customer reads the card in German or in English, including the note that appears when a translation is still missing. Two further changes: a card can only be published with a category (drafts may still sit without one), and the candidate list has an Intake column showing whether an issue has already been taken in, so nobody takes the same candidate twice. Details: Portal management.

    Open the Knowledge Base →
  • Lead scoring rules for email and phone now work

    A scoring rule under CRM → Lead Scoring that checked for "has email" or "has phone" never awarded its points - regardless of whether the contact actually had an email address or phone number on file. Both conditions are now evaluated correctly.

    Open the Knowledge Base →
  • Escalation and SLA now correctly honor business hours and priority overrides (#1533)

    Several edge cases in the automatic escalation and SLA module were fixed. Business hours were previously ignored entirely by the escalation check; an SLA priority override (e.g. a shorter deadline for "urgent") was not applied when detecting breaches; checking for SLA breaches could unintentionally change data as a side effect; invalid business-hours or holiday times/dates caused a server error instead of a clear message; automatic reassignment on escalation picked an agent at random instead of distributing evenly across the group; and read-only users could not view SLA settings.

    Open the Knowledge Base →
  • Portal management has an "Integrations" tab

    The roadmap portal could not tell an external

  • A link now carries the open dialog with it

    If you had a side panel or a window open in the

  • Portal accounts can now be blocked

    Anyone abusing the roadmap portal - with spam requests,

  • Roadmap portal now shows how many requests are linked to a card

    Publicly, a roadmap card

  • Roadmap portal rate limits are now configurable instead of hard-wired

    How many feature

  • Ticket links from emails now only work in your own account

    The "reopen ticket", "mark as

ERP

  • Anomalies, payment calendar and Mirakl tabs are labelled again (#3702)

    The remaining ERP pages showed technical keys instead of readable text in 45 places: the bulk actions and the detail drawer of anomaly detection (detail.expectedValue, acknowledgeAll), the month navigation, the filters and the day tiles of the payment calendar (calendar.dailyInflow, calendar.weekTotal), the input fields of the Mirakl tabs for categories, messages, orders, promotions and shipments, the headings of three delete confirmations (account, sales channel, scenario), the cancel dialog for shipping labels, and the clean-up and product drawer of demand forecasting. What changes: All 45 places now carry a German and an English text. Fixed alongside: the weekday column headers of the payment calendar asked for calendar.weekday.mon while the catalogue has always carried calendar.weekdays.mon, so Mon to Sun were printed as raw keys.

    Open the Knowledge Base →
  • Stock levels and cycle counts are labelled again (#3701)

    In warehouse management, the Stock Levels and Cycle Counts tabs showed technical keys instead of readable text in 49 places - column headers read stockLevels.available, the button that posts an adjustment read stockLevels.submitAdjustment, and even the two tabs themselves carried tab.stockLevels and tab.cycleCounts. What changes: All 49 places now carry a German and an English text - column headers, filters, placeholders, the movement types (goods receipt, pick, put-away, adjustment, count, return, transfer), the stock status (low, OK, over), the count plan dialog and the replenishment table.

    Open the Knowledge Base →
  • A note left while confirming or rejecting a withdrawal is now actually saved

    The note field shown before confirming or rejecting a withdrawal declaration was accepted with no error, but silently discarded - it never reached the database, so it was gone the moment the action completed. It is now stored on the withdrawal record and available on lookup.

    Open the Knowledge Base →
  • A returned SEPA direct debit now starts dunning (#3447)

    If a bank returned a SEPA direct debit collection (for example, insufficient funds), the invoice it was collecting stayed marked as paid by mistake - nothing happened, and the outstanding amount was neither visible nor tracked. What changes: On a returned collection, the invoice goes back to open (unpaid, full amount), and - unless a dunning case is already running for it - a new dunning case starts automatically. A bounced payment no longer disappears from the books without a trace.

    Open the Knowledge Base →
  • Credit notes now reduce the invoice's open balance (#3446)

    A credit note linked to an invoice did not reduce the invoice's open amount - reports still showed the full invoice amount as outstanding, and dunning could chase the full (already partly credited) amount on an overdue invoice. What changes: Issuing a credit note, or cancelling one that was already issued, now adjusts the linked invoice's open balance accordingly - booked the same way a real payment is, so a later payment builds correctly on top of it instead of overwriting it. Drafts are left untouched; only issuing has an effect.

    Open the Knowledge Base →
  • Dunning closes cases when the invoice is cancelled (#3443)

    If an invoice with an open dunning case was cancelled, the case used to stay untouched - automated dunning kept sending reminders and could eventually escalate the case to an external collection agency, even though the underlying debt no longer existed. What changes: When an invoice is cancelled, the system now automatically closes every still-open dunning case for that invoice, noting "Invoice was cancelled". Cases already handed to collections, paid, or written off are left untouched - those continue as their own separate process.

    Open the Knowledge Base →
  • Receiving stock now updates the stock shown in the shop (#3396)

    When a purchase-order line item was marked fully received, or a goods receipt was accepted, only the internal erp stock used to increase - the stock the storefront and checkout actually read stayed unchanged. Newly received goods therefore kept showing as low or unavailable in the shop even though they were physically in stock; only a manual reconciliation run could fix the difference. The shop-facing stock is now updated automatically for every received quantity, with no manual step required.

    Open the Knowledge Base →
  • Resuming a dunning case at the final escalation level now actually grants a grace period instead of immediate handover to collections (#3445)

    Resuming a paused dunning case at the final dunning level promised a seven-day grace period with one more reminder - but did not deliver it: the next automated run instead handed the case straight to the external collection agency with no further warning. Resuming now correctly drops the escalation level back by one step, so the grace period triggers a regular reminder as promised before the case can escalate again.

    Open the Knowledge Base →
  • Return requests in the storefront can be submitted successfully again (#3418)

    The

  • Warehouse: manual stock correction now actually applies and is logged (#3394)

    The manual correction on Warehouse > Stock Levels (the "Adjust stock" button) previously failed on every attempt without changing any stock. It now applies: the entered quantity change is applied to the real bin stock and logged in the movement history with the actual before/after values. When an article is stocked in more than one bin, the correction reports a clear message instead of guessing a bin - in that case, use the bin-level correction on the specific bin instead. A correction made directly on a bin's contents now also leaves an entry in the movement history.

  • Stocktaking, B2B registration decisions, receipt processing and customer invoice access work again (#3228)

    Creating or updating a stocktaking count, approving or rejecting a B2B registration request, and verifying or booking a scanned receipt all failed with a server error on every attempt, so the record could never be saved. Customers viewing their invoice list or downloading an invoice PDF were always turned away as "not authenticated", even while correctly logged in. All four are fixed. Two smaller, related fixes: the natural-language query history now records who ran a query (the entry silently failed to save before), and accepting or rejecting a smart category suggestion now records the actual reviewer instead of always showing "system".

  • VAT management checks against VIES again (#2942)

    The "VAT / VIES Management" page never showed any data, and the "Re-Validate", "Re-validate All" and "DAC7 Export" buttons did nothing - the underlying business function was missing entirely. What changes: The list now shows your suppliers with country, VAT ID, classification (EU B2B, EU B2C, UK, third country) and check status. A single check and a bulk check query the EU service VIES and write the result, with a timestamp, into the validation history. An outage is shown as an outage, not as "invalid": If VIES does not answer, or the member state stays silent, the last established status is left untouched and the history records "Not determined" together with the reason. A disruption at the checking service can therefore never mark a supplier invalid by mistake. Bulk check: A run checks up to 50 suppliers by default and then reports how many were checked, how many were valid, invalid or undetermined, and how many are still pending. One supplier failing does not end the run. DAC7: The export now produces a traceable report per calendar year, with period, generation time, the number of vendors covered and reportable, and the reported revenue. Past reports are in the new "DAC7 reports" tab. Maintaining tax data: The detail panel now lets you record the fiscal representative's VAT ID, the EU revenue and the deemed-supplier flag yourself.

    Open the Knowledge Base →

HR

  • Cost centre and location messages are readable again

    Creating, editing or deleting a cost centre, or assigning a member to one, confirmed the action not with "Cost center created" but with the string hr.costCenters.created. The same happened for locations and their work areas, and for every error message of those two areas - 15 messages in all. The texts were there the whole time, in both languages; the message simply asked for them at an address the interface does not look at. It now names the area the text lives in, and shows it again.

  • A survey's response rate now counts only who was actually addressed (#3393)

    A survey scoped to a department or team showed a tiny response rate even when everyone addressed had answered - the calculation always divided by the whole active workforce, regardless of who the survey actually targeted. For a survey scoped to a 20-person department at a company with 500 active employees, that pushed the rate down to a twenty-fifth of the real figure. The rate now honors the survey's target audience: for a department- or team-scoped survey, only members of that department or team count; a survey sent to the whole workforce still calculates the same way it always did.

    Open the Knowledge Base →
  • An expense report no longer sums entries in different currencies (#3376)

    If you linked expense entries in more than one currency (for example a USD hotel bill and a EUR taxi receipt) into the same report, the amounts used to simply be added together and labeled with whichever report currency you last chose - a numerically wrong total. The report is now rejected as soon as a linked entry was not recorded in the report's currency; create separate reports per currency instead.

    Open the Knowledge Base →
  • Euro amounts in Benefits now follow your language setting (#3417)

    The total paid stat,

  • Onboarding checklist tasks assigned by role now actually get an owner

    When a checklist is created from a template, each task can be set to go to the direct supervisor, the HR manager, the IT admin, or the new employee themselves - previously none of those role-based assignments were resolved, and every such task landed with no owner at all, so it never showed up in anyone's "my open onboarding tasks" view. Tasks assigned to the direct supervisor now go to the new employee's manager (falling back to their absence deputy if no manager is recorded); tasks assigned to the HR manager or IT admin now go to the department manager. Tasks with a specific person picked by hand are unaffected.

    Open the Knowledge Base →
  • Reactivating an employee through the status transition now correctly resets status, termination date and contract, and a rehired employee can be terminated again (#3444)

    Setting a terminated or alumni employee back to "active" through the status-transition endpoint used to update only an internal history flag. Lists and reports that look at the actual employment status kept showing the person as terminated, the termination date stayed set, and their last contract stayed inactive. Reactivation through this endpoint now fully resyncs status, termination date and contract - the same as the direct "reactivate" action already did. Also fixed: an employee who had been terminated once could never be terminated again after being rehired - creating a new termination record failed with "Employee already has a termination record", even though the employee was active at the time. That now works.

    Open the Knowledge Base →
  • The absence rate now weights mid-year hires proportionally (#3378)

    When headcount was growing, the "absence rate" metric used to read too low. Newly hired employees counted a full year's working days in the denominator no matter how briefly they had actually been employed - ten people hired on 1 December counted the same as ten people employed all year. The rate is now weighted by actual employment duration within the year. The separately shown employee count is unaffected.

    Open the Knowledge Base →
  • The hours account now deducts public holidays and approved leave from the target hours (#3392)

    The monthly balance in the hours account used to compare hours worked against the full weekday-pattern target for every calendar day in the month - a public holiday or an approved vacation day counted as target time nobody could have worked. The balance drifted permanently negative as a result, regardless of actual attendance. Public holidays (per the employee's applicable holiday calendar) and approved absences are now deducted from the target before the balance is calculated.

    Open the Knowledge Base →
  • The team hours-account dashboard now also deducts holidays and approved leave (#3392)

    An individual's own hours-account balance already deducted public holidays and approved absences - the aggregated team dashboard view did not, and could show a different (too negative) balance for the same person than their personal page. Both views now compute the same way.

    Open the Knowledge Base →
  • Time tracking and documents in the portal follow the portal language again

    The time-tracking

  • HR: dialogs can now be shared

    Many forms and drawers under HR (including absences,

  • Webhook subscriptions and working-time-limit changes now record who made them (#3228)

    Creating an HR webhook subscription, editing the tenant's working-time limits, or applying a prepared limit template all worked, but silently left the "created by" / "changed by" field empty, so nobody could tell later who set them up. Both now record the acting admin.

  • Clearing a line item's unit price no longer leaves the total stuck at the old amount (#2753)

    When editing an item on a purchase request, the unit price could be explicitly cleared, but the item's total price stayed at the last computed amount - a priceless item kept showing a total that no longer matched any price. The total is now cleared in the same step whenever the unit price is cleared.

    Open the Knowledge Base →
  • Employee documents and CVs are now checked before they are stored

    An upload used to be

  • A failed calendar sync is now reported as failed

    The bulk sync behind "Sync all" always reported "Failed: 0" - even when not a single employee calendar could be synced. A run in which the stored service-account key had expired, the domain-wide delegation had been revoked or Google was unreachable therefore looked exactly like a clean run: the full headcount appeared under "Synced". From now on the run counts every employee truthfully - synced or failed - and names the first reason right in the result; when there are failures the message is no longer shown as a green success notice. The run still does not abort: one broken calendar does not stop the remaining employees from being synced. There is nothing to do - the next sync reports the new number by itself. Which employee is affected is shown, as before, in the employee list under Calendar integration in the Status column; "Show error" reveals the full text.

    Open the Knowledge Base →
  • An emptied Google calendar now releases its time again

    When every entry of an employee calendar was deleted, the events read in last stayed in the sync cache - permanently. The sync only cleaned up vanished entries while the calendar still held at least one appointment; when it came back completely empty, the cleanup was simply skipped. For appointment booking the employee therefore stayed blocked by appointments that no longer existed, with no error to show for it. This did not only hit the rare case of a fully cleared calendar, but also a calendar that is no longer shared, and any sync window that happens to be empty. From now on an empty answer counts as an answer - the cache is emptied along with it. A failed fetch still deletes nothing: if the calendar cannot be read at the moment, the previous state is kept and the failure is shown on the employee under Calendar integration. There is nothing to do: stale entries disappear on the next sync by themselves, at the latest after the interval configured there (default: 60 minutes). Approved absences are unaffected - they keep blocking time straight from the HR area.

    Open the Knowledge Base →
  • Invalid dates in absence requests, policies and blocked periods are now named instead of being rejected as a system error (#2509)

    The 2026-08-28 fix covered the team calendar, career steps, cost centres and other areas, but left the absence module out at the time because it was being worked on elsewhere at the same time. That last gap is now closed: policy assignments (effective from/to), blocked periods, and absence requests, planning and the employee portal now check a date straight away and, on an invalid entry - a typo, pasted text, a day that does not exist - name the field concerned instead of showing a generic error. Valid entries are unchanged.

    Open the Knowledge Base →
  • Pick the Microsoft target calendar by name instead of typing an id

    After connecting a Microsoft account it was still open which of that account's calendars should actually be used - and the id of an Outlook calendar is a string of well over a hundred characters that you cannot read off anywhere. Under Settings → CRM → Integrations, tab HR, card Microsoft Calendar, there is now a Target calendar section for exactly that. If several employees have connected their calendar you first choose the employee; below it the calendars of their account appear by name - the default calendar first, the rest alphabetically. A calendar that is already linked is pre-selected, so you always see what the connection points at. If the access token has expired it is renewed silently while the list loads; if consent was withdrawn at Microsoft, the section says so explicitly instead of showing an empty list. Only a calendar the connected account actually holds can be chosen - a link to somebody else's calendar is therefore impossible. What this step does not do yet: busy times are still not read and approved absences are not written back yet - both follow in the next steps. The Google connection is unaffected.

    Open the Knowledge Base →
  • The GDPR data action preview now names every level the erasure reaches (#2962)

    Before an employee record is permanently deleted or anonymised, the confirmation dialog shows you which records are affected. That list only went one level deep: it named what hangs directly off the employee record. Anything one step further out - the line items of an expense report, a compensation history, the tasks of an HR process - was deleted along with it without ever appearing in the dialog. You were therefore confirming more than the dialog showed. The full chain is now measured and listed, including which level a record is reached through. Nothing additional is deleted - what already happened is simply named in full. The dialog also states where the erasure deliberately stops: records that remain, with only their reference to the person detached, are now listed together with what hangs off them. And a case that blocks the deletion is now detected at any depth and named in the dialog, instead of aborting the run halfway through with a technical error message.

    Open the Knowledge Base →
  • The Google calendar no longer blocks time that is not taken

    Two defects in the calendar sync cache took appointments off the market that were in fact free - no error, no notice, simply no slot offered in appointment booking. First, an all-day entry blocked one day too many: Google reports the end of an all-day entry as the following day, and exactly that date was read as the last blocked day. A single all-day entry on the 5th therefore blocked the 6th as well, and a leave running to the 10th also took the 11th. Second, an entry the employee had explicitly set to "Show as: Free" in Google blocked the whole period anyway - the marking was ignored on the way in. Both are fixed: an all-day entry now blocks exactly the days it covers, and anything marked free no longer takes time away. For customers this means appointments are offered again that had silently dropped out. There is nothing to do: the cache is rewritten on every sync, so entries stored under the old reading correct themselves - at the latest after the sync interval configured under Calendar integration (default: 60 minutes). Approved absences were never affected: they keep blocking time straight from the HR area, independently of the calendar.

    Open the Knowledge Base →
  • The preview of a GDPR data action now states its scope, and a shrunken scope is refused instead of quietly executed (#2957)

    When a due data action ("delete" or "export & delete") is confirmed in offboarding, the system works out which linked records go with it by asking the database itself at the moment of execution. That is deliberate, so the list cannot go stale - but it has a flip side: if that lookup returns less because a link is missing, the run deletes less and the confirmation screen shows less at the same time. It looked exactly as complete as before, and nothing pointed at the gap. For a data-subject request that would have meant your own evidence reporting a completeness that did not happen. The deletion path now records which areas outside HR it has to cover - today appointments, CRM and the person directory. The confirmation screen names those areas, and if one of them is no longer reachable it is shown in red as a gap and execution is refused until the situation is resolved. A complete case runs unchanged: nothing different and nothing less is deleted than before. For "anonymize", an unreachable data category is shown as well, but the action itself is not blocked.

    Open the Knowledge Base →

Shop

  • Icon-only buttons in the customer storefront are now read out by name (#3693)

    Affected were 22 buttons that show nothing but an icon and that a screen reader therefore announced as "button" and nothing else: the grid and list toggles and the pager of the product list, the pagers of the blog and of the brand page, the quantity steppers in the cart and when creating a subscription, clearing the search on the search page, in the app store and in the language picker, closing the language picker and the image gallery, the arrows of the scrolling card row, the add button of the cross-sell suggestions, the star rating, and the high-contrast toggle of the shop's own accessibility toolbar. All of them now carry a spoken name in German and English. Nothing changes visually.

  • Icon-only buttons in the storefront page builder are now read out by name (#3694)

    Affected were 33 buttons that show nothing but an icon and that a screen reader therefore announced as "button" and nothing else: the switches of the block editors for accordion, button, category grid, gallery, hero banner, logo strip, product slider, testimonials and video, the section settings switches for FAQ, testimonials, full width and page status as well as the display switches of the page editor, the drag handle of the section list, the switches, the add and the remove actions of the header and footer editors and of the section settings, and in the template store the carousel, the thumbnail picker and the close buttons of both preview windows. All of them now carry a spoken name in German and English - the very caption that already stood beside them. Nothing changes visually.

  • Returns, credit notes and the template store show their text

    In 14 places the screen carried not the label but the internal name the interface looks it up by. In the returns drawer that affected the condition selector, the "restock items" checkbox, the refund method selector and the return reason "damaged in shipping"; in the credit note drawer the invoice reference and the change date; in a product's pricing section the hint under the cost price. In the template store the whole install dialog - title, question, note and the button shown while installing - plus the "Active" and "Installed" badges and the rating share on the template card carried the same defect. The install dialog was the quietest case of all: the source carries an English fallback next to every call, and it never rendered. All 14 places are now written down in German and English.

  • A coupon code entered in the cart now actually lowers the total (#3427)

    Entering a coupon

  • A new address in the customer account can be saved again (#3421)

    The new-shipping-address

  • Cancelled orders now release their stock again

    A product's stock is reserved as soon

  • Checkout now completes orders successfully (#3424)

    The regular checkout (non-marketplace purchases) sent an incomplete data package when placing an order - among other things the cart reference and billing address were missing, and the country field carried the wrong name. Any one of these gaps on its own caused the order to be rejected before it could even be checked. The checkout now sends the data package complete and in the expected format.

    Open the Knowledge Base →
  • Create gift card: the maximum amount is now checked, and the dialog closes with Escape

    The admin gift-card creation form used to check only that the amount was at least 1.00 EUR - an amount above 1,000.00 EUR was only rejected by the server, shown as a generic error. The form now flags an amount that is too high right at the amount field. The dialog also now closes with the Escape key and is correctly announced as a dialog to screen readers.

  • Discounts are now calculated correctly when multiple promotions apply

    Combined promotions could sum the shipping discount beyond the actual shipping cost and accidentally subtract an item discount twice from the grand total. Both are fixed - the displayed grand total is now correct in every case.

  • Error messages in the withdrawal form and checkout are now translated

    When submitting the

  • Failed webhook deliveries are now retried reliably (#3400)

    When a webhook delivery to your receiving address failed, a retry used to be scheduled (after 30s, 5min, 50min) - but only for as long as the server process kept running without interruption. A restart or deployment inside that window lost the scheduled retry, and the delivery stayed on "retrying" forever, never actually retried. A recurring background run now regularly checks for due retries and delivers them automatically, independent of restarts. The manual per-delivery retry button in the delivery log remains available as before.

    Open the Knowledge Base →
  • Order and customer lists now show a fault message on a load error (#3406)

    If loading the order or customer list failed (for example a server error), the same empty table used to appear as for a genuinely empty list - an outage was not visually distinguishable from "no records". Both lists now show a visible notice that loading failed.

    Open the Knowledge Base →
  • Orders paid entirely by gift card can now be refunded (#3349)

    When a gift card covered

  • Per-customer coupon limits now work at checkout for signed-in customers (#3397)

    The per-customer usage check referenced a column that never existed on the order table - checking such a coupon for a signed-in customer failed with an error every time, regardless of the order's status. On top of that, cancelled orders and orders with a failed payment were wrongly counted as usage. Both are fixed: the check now reads the codes actually applied to the order, and cancelled or payment-failed orders no longer count.

    Open the Knowledge Base →
  • Plan product limit is now enforced

    Once the number of products included in a plan is reached, creating another product is now rejected with a clear error message instead of allowing unlimited products.

  • Product dimensions reject negative values right in the form (#3415)

    Width, height and

  • Product list now shows a fault message on a load error (#3406)

    Like the order and customer lists before it, a failed product list request used to render the same empty table used for genuinely zero products. The list now shows a visible notice that loading failed.

    Open the Knowledge Base →
  • Product prices are now split into gross/net correctly (#3350)

    Creating, editing, or bulk

  • Shipping cost at checkout now matches the cart's real weight

    For weight-tiered

  • Subscription billing dates now follow the calendar month/year instead of a fixed day count (#3373)

    Monthly and yearly subscriptions used to advance by a flat 30 or 365 days each cycle. That made the billing date drift away from the originally chosen calendar day with every renewal, and yearly subscriptions lost a day in every leap year. The next billing date is now set to the same calendar day in the following month/year (or, when that day does not exist in a shorter month, to that month's last day).

    Open the Knowledge Base →
  • Translation changes for categories and tags are no longer lost (#3363)

    If you changed a translation field in the category or tag dialog and the dialog quietly reloaded the same data in the background shortly after, it silently discarded your unsaved change and showed the old value again. The dialog now keeps an unsaved change through such a background reload; only a deliberate language switch reloads the form.

    Open the Knowledge Base →
  • A "once per customer" discount code can no longer be redeemed twice (#3297)

    If the same customer redeemed a discount code limited to one use per customer twice at the same time (for example by double-clicking), the discount used to be granted both times even though the limit only allowed one use. Redemption now checks the allowance in a single, guarded step: once it is used up, the second attempt is rejected.

    Open the Knowledge Base →
  • A discounted bundle's price and the tax it shows agree again

    When a bundle is priced through a percentage discount, its gross and net price used to be rounded independently of each other. In roughly one out of four combinations of price, tax rate and discount the two values ended up a cent apart, so the tax derived from them no longer matched the tax rate of the items in the bundle. The net price is now calculated from the discounted gross price and the items' tax rate; if a bundle mixes items with different tax rates, each rate is calculated separately. The gross price on display is unchanged - it was never affected.

  • A newly created shop can add products right away

    Creating the very first product used to stop with an error. The cause was in the setup: a freshly created shop started without a tax class and without a language, and a product needs both - the tax class for the product itself, the language for its title and description. Every new shop now brings both along from the start: the standard tax class at 19 percent and German as the default language. Existing shops missing either one are topped up automatically on the next start; anyone who has already created their own tax classes or languages keeps them unchanged - the entry is only added where there was nothing at all.

  • A refund now pays back gift cards that were used (#3349)

    When an order was paid

  • Variant prices are now checked against the tax rate

    Creating or editing a product variant used to store the gross and net price independently of each other - a pair like €100.00 gross / €84.00 net could be saved even though no tax rate produces that combination at 19% tax. That led to an incorrect tax breakdown in the cart and on the order. Variant management (single edit, bulk edit, variant generation) now rejects a price pair that doesn't match the product's configured tax rate, and names the expected net amount in the error message. A rounding difference of up to 1 cent is still allowed.

  • Old account erasures are now finished off automatically (#2480)

    Before the erasure feature from #2436 was introduced, deleting an account still left seven leftover fields on the customer record, four related tables with personal data, and the IP address, browser identifier and search parameters in the audit trail - among other things, the search key derived from the e-mail address survived, so the person stayed findable by their own address. An automatic background run now brings those already-erased accounts to the same state as a present-day erasure: leftover fields are cleared, the related tables are emptied, and the personal trace is stripped from the audit trail. There is nothing for you to do - the run recognises affected accounts by the fingerprint of the old erasure and leaves newly created or already fully erased accounts untouched. Orders and the audit trail itself stay traceable, just as with a present-day erasure.

    Open the Knowledge Base →
  • Order edits and stock bookings are now atomic (#3275)

    If the totals recalculation that follows adding, changing or removing an order line item failed, the line item change stuck anyway - the order then showed a grand total that no longer matched its own line items. During checkout and on cancellation, stock for several articles was booked one at a time: if the booking for one article failed, the earlier articles stayed deducted (or restored) regardless - a stock count that no longer matched the order, with nothing surfacing the mismatch. And saving several changes at once could hand back a half-applied batch: if the third of four changes failed, the first two were already saved although the message reported a failure. All three now run inside a single transaction each, a batch of edits included: if any step fails, the order is left completely unchanged and no entry is written to the edit history either.

    Open the Knowledge Base →
  • The last unit in stock can no longer be sold twice (#3297)

    If two customers checked out the last available unit of a product at the same time, both orders could be paid and completed even though only one unit was in stock - checkout deducted stock without a lock. Checkout now deducts stock in a single, guarded step: if stock has run out, the second order is rejected with an error before payment is initiated.

    Open the Knowledge Base →
  • Toggling a shipping template's active status no longer deletes its shipping zones (#2757)

    Switching a shipping template active/inactive in the shipping overview used to remove all of its zones and rates and reset the template's default flag and processing times - visible only the next time the template was opened. The cause was that every partial edit was internally treated as a complete replacement. The switch now changes only the active status; zones, rates, the default flag and processing times stay untouched.

    Open the Knowledge Base →
  • Theme editor, CMS editor, tags and marketplace categories are now usable on a phone (#1405)

    On a 390-pixel-wide screen, the theme and CMS editors left their fixed side panel (up to 380 pixels) standing, leaving almost no room for the preview; the tags and marketplace categories overviews either squeezed their columns to unreadable widths or pushed the whole page sideways. Below 640 pixels both side panels now live in a slide-out panel, and both tables scroll horizontally in their own box - the page itself stays put. Customize theme,

    Open the Knowledge Base →
  • Digital downloads are now checked before they are stored

    A download file for a digital

  • The media library now checks uploaded files by their content (#3119)

    Until now the browser's type declaration alone decided whether a file was accepted - the content itself was never read. Every upload is now identified by its actual bytes, and a file whose content disagrees with the declaration is refused before it reaches storage. The media library also no longer accepts SVG files: an SVG is a document that can carry executable code, and your media library images are served publicly. SVG files already stored are from now on delivered as a download instead of as a page, so they can no longer execute anything. Please use JPEG, PNG, WebP, AVIF or GIF for product images.

    Open the Knowledge Base →
  • Orders and returns in the customer account report a failure instead of showing an empty list (#3006)

    When the shop answered the order or return list in a shape the customer account could not read, the page said "no results" or "no returns" - so a customer with a full order history was told they had never ordered, and had no reason to report anything. The account overview, the "Orders" tab, the returns page and the order picker in the return form were all affected. All four now show an unreadable answer as a visible error. An account that genuinely has no orders or no returns still says exactly that. There is nothing for you to configure.

    Open the Knowledge Base →
  • The product page's review tab stays up instead of going blank (#3003)

    When the shop answered the list of approved reviews in a shape the storefront could not read, the entire review area collapsed - the average rating, the distribution, the form for writing a review and the reviews themselves disappeared together, with no notice. The storefront now reads the list in the shape the shop actually sends, and shows an unreadable answer as a visible error instead of claiming "no reviews". A product that genuinely has no reviews still says exactly that. There is nothing for you to configure.

    Open the Knowledge Base →
  • A newly created shop brings its own currency (#2950)

    A freshly created workspace carried no currency at all. The cart needs one in order to exist, so it answered with an error as soon as a visitor tried to put the first article in - however many sellable articles the shop held. Newly created workspaces now receive the euro as their default currency, and existing ones have it added where they carry no currency at all. Anyone already maintaining their own currencies keeps them unchanged - nothing is overwritten and nothing is added. Further currencies are created in the settings as before.

    Open the Knowledge Base →
  • Prices, ratings and related articles are back in the shop (#2967, #2968, #2969)

    The product page, the product tiles, the cross-sell strip of the cart and the wishlist showed "NaN €" instead of a price. The cause was the shape in which the storefront received the price; it now always arrives as an amount. In the same pass three pieces of information reach the storefront that were never delivered before: the struck-through reference price with its discount share, the star rating with the number of published reviews, and the category assignment that feeds the "Related products" section. All three displays existed in the shop but could never appear. You do not have to configure anything for this.

    Open the Knowledge Base →
  • Product tiles always show an amount (#2952)

    Product tiles could show "NaN €" instead of a price. The cause of that was already fixed (#2967) - what is new is that the tile now guards the price itself against every shape it can arrive in, and stays exact to the cent while doing so: an article at 49.90 € reads "49,90 €" on the tile, not "0,49 €" and not "4.990,00 €". The same applies to the struck-through reference price and the discount share calculated from it, which used to disappear entirely in those cases. You do not have to configure anything for this.

    Open the Knowledge Base →
  • The customer account shows orders again

    "My account", the order list and the order detail page of your storefront showed "Something went wrong" instead of the orders as soon as a signed-in customer had even a single order. Every customer with an order history was affected; only a freshly created account without any order saw a working page, which is why the failure never showed up on test accounts. The cause was a drift between what the order endpoint delivers and what the storefront reads from it. The three pages show position counts, amounts and positions again, and the "Returns" page - which reads the same data and failed the same way - walks through the selection of the items to send back once more. Two things are better than before: the order detail page now names the payment and shipping method instead of leaving the panel blank, and the customer's view of an order no longer hands out internal details that only concern your team - internal comments, tags and promotion codes now stay on the admin side.

  • The status route stays for repayments settled outside the system - and is labelled as such

    Payment methods with no payment service provider attached (invoice, prepayment, SEPA direct debit) carry no reference a refund could be issued against. When you have repaid such a case outside the system, you still book it through the status list. What is new is that this list asks first and names the action for what it is: "Set to 'Refunded' - bookkeeping only, no money moves". Until now that change went through on a single click, with no prompt and no indication that no money was involved.

Booking

  • The calendar id is no longer stored twice

    With the Google Workspace sync, a person's calendar id is always their email address. Until now that address was therefore written a second time into the staff member's Google calendar id field - the same address stood in the record twice. From now on it is only derived there: the field stays empty for synced staff members and the appointment scheduling uses the stored email address automatically. The same identifier is still displayed, and nothing changes about booking. An identifier entered by hand - a room or resource calendar, for instance - stays untouched and still takes precedence. Existing duplicates are cleared by the system on its next start.

  • The shared Google key belongs to the personnel area while the calendar integration is running

    Since appointment booking and the calendar integration use the same Google service account, it could be overwritten on the Google Workspace page by people who may only manage appointments - in the worst case the calendar sync of the entire workspace stood still afterwards. While the calendar integration runs on that access, admin email, domain and the key are now reserved for the Manage calendar integration permission; an attempt to save without it is refused and leaves the existing credentials untouched. You still set the organisational unit here as before, and a workspace without an active calendar integration sets the connection up on this page unchanged.

  • Booking dashboard now shows load errors instead of empty lists

    When one of the four booking dashboard views (Daily Overview, Reschedule Requests, Analytics, Reporting) failed to load - for example due to an expired session or a server error - it used to show the exact same empty state as a day with genuinely no bookings. A failed load now shows its own error message, so it is clear whether there really is nothing to show or the request should be retried.

  • Booking list now shows a fault message on a load error (#3406)

    A failed booking list request used to render the same empty table used for genuinely zero bookings - the list already knew about the error internally, it just never displayed it. The list now shows a visible notice that loading failed.

  • Booking page styling completed

    Part of the styling was missing on the public booking page: font sizes, spacing and table headers of the shared controls were not shipped and fell back to inherited values. The page now ships its styling in full and looks like the rest of the product.

  • Your booking page now shows the booking products

    In the first step ("What is it about?") appointment types appear under the heading of the booking product you assigned them to, in the order you set under Appointments, Booking products. Until now the booking page did not read the grouping, so it stayed invisible to your customers. Appointment types without an assignment do not disappear: they remain selectable, collected under "Other services". As long as no appointment type is assigned at all, the page looks exactly as before.

    Open the Knowledge Base →
  • An unreachable HR module no longer reads as "everybody is available" on the booking page

    Before it offers a single time, the public booking page asks the HR module who is on leave, who has reported sick, who has a public holiday, and where a calendar entry already sits. If that question could not be answered - a dropped connection, a permission error, a tenant that is only half set up - the answer used to be read silently as "nobody is busy", and a customer could book an appointment with somebody who is not there at all. We no longer claim availability we could not verify: when the HR lookup cannot be answered, the page reports an error instead of offering times that may not exist. The failure is also logged visibly now, so it gets noticed and fixed. For tenants that do not use the HR module at all nothing changes: there is nothing to look up there, and appointment booking keeps running on its own rules exactly as before.

    Open the Knowledge Base →

Settings

  • Deleting staff now requires the matching permission (#3411)

    The delete button in staff settings used to be visible to anyone who could open the page, even without the "delete staff" permission - a click used to end in a server rejection only. The button now only appears for roles that hold that permission.

    Open the Knowledge Base →
  • The role editor dialog now closes with Escape and is announced as a dialog (#3419)

  • Blue text in dark mode is now properly legible (#2945)

    in dark mode, blue pieces of text - ticket numbers, linked names, active tabs, markers in tables - used a blue that was too dark on the lighter surfaces, cards and table rows. Measured, it reached only 4.4:1 of contrast there; WCAG 2 AA asks 4.5:1 for normal text. On the very dark page background it was barely noticeable, on every raised surface it was - and that is where most of the text sits. Those places now use the lighter blue and reach at least 6.1:1. Hovering still brightens the colour visibly, so the difference between resting and touched is preserved. Icons, borders and the large figures on the KPI cards keep their blue: a different threshold applies to them, and they already meet it. Nothing changes in light mode.

    Open the Knowledge Base →

Tasks

  • Project list now shows a fault message instead of sample data on a load error (#3406)

    A failed project list request used to silently show five fixed sample projects as if the request had succeeded - an outage was indistinguishable from real project data. The list now shows a visible notice that loading failed.

    Open the Knowledge Base →
  • Task webhook subscriptions now record who created them (#3228)

    Creating a webhook subscription for task events worked, but silently left the "created by" field empty, so nobody could tell later who set it up. It now records the acting admin.

Marketing

  • Google Shopping product feed reachable again (#2841)

    The feed Google Merchant Center fetches answered with a server error instead of the article list - in every tenant. The cause was a misnamed column in the underlying query. The feed now delivers a valid article list again, with a link for every article; an article without a translation appears with its id instead of a broken link. You do not have to configure anything for this.

    Open the Knowledge Base →
  • The social media overview and calendar no longer run off the edge of the screen on a phone (#1405)

    On a 390-pixel-wide screen, the 7-day chart on the overview could burst its columns and push the page sideways, and the month calendar squeezed its seven weekday columns to unreadable widths instead of scrolling. Both now scroll horizontally in their own box, and the page itself stays put.

    Open the Knowledge Base →
  • Structured data now shows the correct price (#2970)

    The price in the JSON-LD that Google, price comparison engines and rich snippets read was 100 times too high - a product priced at 49.50 EUR appeared there as 4,950.00 EUR. This affected both the storefront product pages and the JSON-LD preview in the SEO Meta view. Both now show the same, correct price.

    Open the Knowledge Base →

Bug tracker

  • Attachments are checked before they are stored and before they are handed out

    An attachment on

Roadmap portal

  • Declined requests no longer accept votes

    A declined feature request, or one already linked to a roadmap card, could still receive votes even though comments on it were already locked. Both terminal states are now frozen the same way - the voting section shows a notice instead of the voting options.

  • The roadmap's starting cards now actually appear

    Since 28 August a portal in which no card had ever been created was meant to receive two explanatory starting cards on its first start. They arrived nowhere: the database refused the write in every single workspace, and because that happened silently in the background, the roadmap stayed empty and looked entirely unsuspicious while doing so. The defect is fixed and the two starting cards are created on the next service start. Nothing about their content or their handling changes: they are published and can be edited or deleted in the portal administration like any other card. A portal that already carries cards of its own still receives no starting cards. Details: Customer portal: roadmap & sign-up.

    Open the Knowledge Base →

August 2026

Booking

  • Google credentials now live in one place

    The service account for the Google Workspace sync is shared with the HR calendar integration from now on. Setting it up does not change - admin email, organisational unit and domain stay on this page, and the sync runs on unchanged. What is new is that a revocation under Security → Google credentials really reaches every place: until now a credential removed here could stay valid in the calendar integration. The "Remove connection" button on this page therefore only disconnects the appointment side (the organisational-unit filter) and leaves the shared key alone.

  • Dropdowns in appointments are now read out by name (#2859)

    Affected were the appointment list with status, staff member and appointment type, absences with the staff picker, the calendar connection with the internal and Google calendar, and the day of week in the working hours of staff and teams. Anyone using them with a screen reader heard nothing but "combo box" there - with no hint of what was being selected. All of them now carry a spoken name in German and English. Nothing changes visually. Bookings · Workspace ·

    Open the Knowledge Base →
  • A sick note blocks appointments right away, and the calendar no longer names the reason

    Until now only an approved HR absence reached the booking page. A sick note is never approved automatically, though - it stayed open until a manager decided, and the employee stayed bookable in the meantime. Somebody who called in sick in the morning could still be booked that same afternoon; the customer showed up, nobody was there. A reported sick note now takes those times off the market immediately, without waiting for an approval. A leave request that is submitted but not yet approved still blocks nothing - otherwise anyone could take their own appointments off the market simply by asking. Second change in the same step: in the company-wide absence calendar a sick note used to carry the absence type in the event title - health data about a colleague, visible to everyone subscribed to that calendar. It now shows only the name and "absent". Every other absence type, annual leave for example, still appears with its name.

    Open the Knowledge Base →
  • The customer's message is now visible on the appointment

    Whatever a customer wrote under "Your message" in the booking form was stored, but shown nowhere in the admin area - the customer believed they had told us something, and nobody ever read it. The notes drawer in Booking Management now shows the message word for word, clearly separated from your internal note: the customer message on top and read-only, your note below it and editable as before. If the customer wrote nothing, the upper section is omitted entirely. In the list, affected bookings carry a small speech-bubble icon next to the customer name. Every previously received message becomes visible too - they were stored all along. Also fixed: when a customer rescheduled their own appointment through the link in the confirmation email, your internal note used to be dropped; it now travels along.

    Open the Knowledge Base →
  • Times now sit beside the date when rescheduling

    The reschedule dialog used to offer a single field for typing a date and time - which times were actually free that day appeared nowhere, and moving a booking onto an occupied time only surfaced on save. Now you pick the date and the day's times appear below it, in the same shape customers see when booking. Taken times stay visible, name the reason ("taken", "absent", "daily limit reached", "too short notice") and cannot be selected. If nothing is free that day, the dialog says so. The times are meant in the assigned staff member's timezone, which is named below the selection.

    Open the Knowledge Base →
  • Absences: duplicate and overlapping periods are now rejected

    The same period could be recorded for the same person any number of times - and each of those records triggered its own redistribution of the affected appointments. The list then showed several identical-looking entries, and it was no longer possible to tell which one had actually triggered a rebooking. If a new period overlaps an already active absence for the same person, recording it is now rejected with a reference to the existing period. A single shared day is enough: if an absence ends on 14 March and the new one is meant to start on 14 March, that counts as an overlap - you can attach a new period seamlessly starting 15 March. A cancelled absence blocks nothing; you may re-record a withdrawn period at any time.

    Open the Knowledge Base →
  • Redistributed appointments now only land inside real working hours

    When redistributing an appointment, the system previously only checked whether the replacement person has a schedule entry on that weekday at all - not whether the appointment falls inside their working hours. A 16:00 appointment could end up with someone who only works 08:00 to 12:00; the affected customer would receive a rebooking confirmation for a time when nobody is there. Redistribution now runs through exactly the same availability check as a new booking or a customer-initiated rebooking: holidays, the schedule in the replacement person's own time zone, their own absences, blocked periods from the HR module, the daily limit and actual occupancy. If nobody genuinely fits, the appointment still shows up as "rebooking required" as before - that is the more honest outcome than an assignment nobody can keep.

    Open the Knowledge Base →
  • The absence list and the employee picker were empty

    The Staff absences page showed "No absences found" no matter how many were recorded, and the employee picker in both the recording dialog and the filter stayed empty - the page was reading the server response at the wrong place. Both now show data again.

    Open the Knowledge Base →
  • The impact preview finally names time and customer

    The preview shown before saving displayed one line per affected appointment, but without a time or a name - you could see that something was affected, never what. Both now appear in the line, the time with its time zone abbreviation as everywhere else. If no appointment in the period is affected, the preview says so explicitly instead of staying empty below the counters.

    Open the Knowledge Base →
  • Field captions in appointment booking are now linked to their field

    Across absences, the email rules, the appointment list, the holidays, the widgets, the workspace and the shared drawer fields of the configuration tabs (languages, products, staff, teams, appointment types) the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "Subject, edit box". That link is now in place. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. Four places sound different: below "Languages" and "Schedules" for a member of staff, below a team's "Entries" and below a widget's primary colour there is no single field but a group - several choice buttons, a repeated list of rows, or a colour swatch with its matching colour value. A screen reader now announces a group with that name there.

    Open the Knowledge Base →
  • The booking portal shows dates and times in the language you booked in

    Anyone using the booking page in English still saw a German date on screen - “Donnerstag, 20. August 2026” - while the confirmation email for the very same appointment had been dating in English for a while. Screen and email contradicted each other. The day strip, the time grid, the summary before submitting, the confirmation page and the manage view now follow the language chosen in the booking form, using the same rule the email uses. Until a language is chosen, the previous German format stays. Time zones are unchanged: times still show in the visitor's own zone, with the short label beside them.

  • Appointment booking moved to the shared interface controls (technical)

    In the booking management list, the widgets area, "My appointments", and the calendars/staff tabs of the booking settings, buttons and text fields now come from the shared interface toolkit instead of each component carrying its own code. Look and handling stay the same; what becomes consistent is keyboard focus, contrast in dark appearance and the behaviour of disabled fields.

    Open the Knowledge Base →
  • Appointment emails now use the assigned staff member's timezone and name it

    The confirmation, both reminders, the cancellation and the reschedule email always stated the time in a single, system-wide timezone - regardless of where the assigned staff member actually works. If you run staff in another timezone, you were sending out a time nobody would show up for. Every appointment email is now formatted in the timezone stored on the staff member and names it in the text - for example "at 10:00 (CEST)". If no timezone is stored on the staff member, the system-wide default applies as before. For your own email templates, the placeholders {{appointmentTimezone}} (e.g. Europe/Berlin) and {{appointmentTimezoneLabel}} (e.g. CEST) are now available.

    Open the Knowledge Base →
  • Booking page: timezone in the summary too

    On the public booking page and on the page for rescheduling and cancelling, the timezone abbreviation now also appears directly next to the selected time, not only as a footnote below the time grid. Times are still offered in your visitor's own timezone.

    Open the Knowledge Base →
  • Every time now names its timezone

    In the booking management list, the booking analytics, "My appointments" and the absence impact preview, a time used to appear with no indication at all of which timezone was meant. What was shown was your browser's timezone - so two people in different countries read different numbers for the same row, and neither display revealed it. Every time is now followed by its timezone abbreviation (for example "CEST" or "CET"). The displayed time itself is unchanged.

    Open the Knowledge Base →
  • Holidays: one shared source instead of two separate stores (#1246)

    The Holidays tab of Appointment Booking used to keep its own store with its own import, independent of the HR area's holiday calendar. Visible effect: a holiday HR already knew about (e.g. Good Friday) remained an ordinary bookable day in Appointment Booking, and anyone who wanted holidays in both areas had to import them twice. Both areas now read and write the same store - what you add or import here also appears in the HR area, and vice versa. Import runs through the same path already cross-checked against a second official source used in HR. For Appointment Booking, only your company's own country (from the workspace settings) counts; holidays from other countries no longer close your booking flow. Existing holidays from the appointments module were carried over automatically - nothing was lost. Region is now picked from a list instead of typed, which stops the same holiday ending up twice in the list through different spellings ("Bavaria", "BY", "DE-BY"). The Recurring yearly option is gone: the shared store is instead refreshed automatically every day for the current and next year.

    Open the Knowledge Base →
  • Dialogs in the appointment booking settings are cleaner for screen readers

    In the email rules, holidays, widgets and the workspace, the dimmed area behind a dialog window used to be announced to assistive technology as its own operable element, even though it is purely decorative. It is now correctly marked as decorative and no longer shows up as a tab stop in screen readers. Closing itself is unchanged: the visible close button and the Escape key still work as before.

    Open the Knowledge Base →
  • A team's timezone now actually affects its working hours

    You could set a booking team's timezone, but it had no effect - working hours configured for a team ended up applying in each member's own individual timezone instead of the team's. Saving a team's working hours now also carries the team's timezone onto every member.

    Open the Knowledge Base →
  • Holidays, absences, and the daily limit now apply on the correct calendar day

    An appointment shortly after midnight in a staff member's own timezone could previously be checked against the wrong calendar day, because these three checks determined the day in UTC instead of the staff member's timezone - a holiday or a day off could go unnoticed as a result. All three checks now use the same staff-timezone-based calendar day the working-hours check already used.

  • Rescheduling: the timezone is now visible and unambiguous

    When rescheduling a booking, there used to be no indication below the time field of which timezone the entered time applied to - depending on how the server happened to be configured, the actually-stored duration of the new appointment could end up different from the number of minutes you typed. The field now shows which timezone the input is understood in - by default the assigned staff member's - and a time with no recognizable timezone is no longer accepted.

    Open the Knowledge Base →
  • Managing an appointment from the confirmation e-mail link works on a phone too

    On the reschedule-and-cancel page, the heading and the Reschedule / Cancel / Back buttons ran off the visible area on narrow screens, and long names or appointment types pushed the summary rows past the card edge. Both now wrap cleanly.

    Open the Knowledge Base →
  • The booking page now works properly on a phone

    Most of your customers open the booking link on their phone, and until now the flow there was awkward. The calendar's day strip stretched the whole page sideways, so you had to swipe the page just to reach the times; the arrow buttons for earlier and later days were too small to hit reliably; and tapping a form field made iPhones zoom in on their own and leave the customer stranded in the magnified view. All three are fixed: only the day strip itself scrolls now, every button has a finger-friendly size, and the input fields no longer trigger auto-zoom. The same applies on tablets. Nothing changes about the steps, the fields or the confirmations.

    Open the Knowledge Base →
  • A dark-mode switch - top right on every page

    The public booking page has been fixed to light since 6 August. It now has a visible light/dark switch in the top right corner, so visitors can deliberately switch to dark - fully designed this time, not just half. The choice is remembered on the next visit, including after reloading the page. Without an explicit choice the page stays light, regardless of whether the visitor's device is set to dark.

    Open the Knowledge Base →
  • Cancel booking: consistent wording in German

    The optional reason field in the cancel-booking dialog now uses the standard German term Stornierungsgrund (optional). The English label is unchanged; only the German wording changes.

  • Rescheduling now checks the same availability as a new booking

    Anyone moving their appointment via the management link from the confirmation email could previously end up with a time the booking page would never have offered - a holiday, an approved vacation day for that staff member, a time outside the staff schedule, or a day where the staff member's daily meeting limit was already reached. Until now those checks only ran on new bookings. Rescheduling now runs through the exact same availability check - holiday, staff schedule, absence, the HR-sourced blocked times, and the daily limit. The appointment's own previous slot does not count as a conflict against itself, so rescheduling onto the unchanged time still works.

    Open the Knowledge Base →
  • A guided start instead of seven equal tabs

    The setup area for Appointment Booking now greets you with a short checklist: create an appointment type → add a staff member with working hours → share your booking page. Every step says what it is for, and the button next to it takes you to the right place. A progress bar shows how far you are. The middle step matters most: a staff member without working hours effectively does not exist for your booking page - neither a language nor a free slot will appear there. That exact case is now warned about explicitly instead of looking finished.

    Open the Knowledge Base →
  • Booking language in the appointment module: search instead of scroll

    In the Languages tab of the appointment setup you now pick a further booking language from a searchable dropdown instead of a fixed drop-down list. Open the field, type a language name or code, and the list filters to the matching entries right away - with many languages you no longer have to scroll through the whole list. The choices are still your own language set from Settings → Languages; languages already added are marked and cannot be added twice.

    Open the Knowledge Base →
  • Clearer wording in the navigation

    Widgets becomes Embedding, Workspace becomes Google Workspace, and the Appointments group in the sidebar is now called Bookings - three levels no longer share one name. The Booking Widgets page is now called Embed your booking page.

  • Correction: the sync interval lives in the personnel area

    For the pace of the Google sync the manual pointed at the Google Workspace page of Appointment Booking. It is not set there - it is set per connection under Calendar integration in the personnel area (default 60 minutes). On the Google Workspace page you only adopt users as bookable staff.

    Open the Knowledge Base →
  • Correction: three manual statements about Appointment Booking were wrong

    The manual described behaviour that does not exist. Corrected: the Google Calendar ID field on a staff member has no effect on availability - busy times from Google arrive via Person from staff management or via the team's calendar. A staff member's email address serves as a contact address and as a criterion in the email rules; SCS sends no calendar invites to it. And for the meeting type Google Meet the appointment is marked as a video call, but a Meet link is not created automatically.

    Open the Knowledge Base →
  • Deleted staff members can be restored again

    In the Staff tab of the appointment settings a deleted entry stayed deleted even when you clicked the back arrow with Show deleted enabled - nothing visible happened. The click now restores the entry, and the list shows it as active straight away.

    Open the Knowledge Base →
  • Every empty state names the next step

    Where it used to say only "No appointment types found", a sentence now explains what the entry is for and a button leads straight to creating one - in every section of the setup. In the Calendars tab the empty state leads to the Teams tab accordingly.

  • Setup now starts at the appointment types

    Opening the configuration used to land you in the Booking products tab - of all places the section your public booking page never reads. The default section is now Appointment types, which is what your customers actually pick. Booking products moved to the end of the tab bar and carries a clear notice that they currently have no effect on your booking page; wiring them to appointment types is scheduled as separate work. Old bookmarks pointing at a specific section keep working unchanged.

  • The booking flow runs through reliably

    After choosing an appointment type the page reliably moves on to the next step. Should no bookable language ever be on file, the page no longer sits silently on step 1 but clearly states that online booking is currently unavailable.

    Open the Knowledge Base →
  • The help button finds Booking Management again

    On the Booking Management page the "?" used to open the general help home page instead of the matching manual page, because the registry still held the page's old address. That is fixed.

    Open the Knowledge Base →
  • The public booking page now always appears light

    Until now the page - both at your shop address (…/termine) and at appointment.scs.sellerlogic.com - followed each visitor's dark-mode setting; on a device set to dark it appeared unintentionally dark and only half styled. Its appearance is now deliberately fixed to light and identical on both entry points, regardless of the visitor's device.

    Open the Knowledge Base →
  • Three places no longer show raw text

    The copy button literally reported "copied" at the moment it should confirm, and the email rules as well as the workload overview each showed an internal key instead of text in one spot. All three are translated.

  • Your booking page finally has a visible address

    Above the setup you now find the Your booking page card with the full address you hand to customers - plus Copy address, Open and a Preview that shows the page right inside the admin. Until now nothing in the admin revealed what your own booking page is called or what customers see there; the only visible thing was an embed snippet in a dialog. If no shop address is on file yet, the card shows the way to the domain settings instead of a dead link. If the page does not offer any slots yet, the note sits right next to the link.

    Open the Knowledge Base →
  • a confirmation immediately after booking,

  • a reminder 24 hours and again 1 hour before the appointment,

  • a cancellation notice when the appointment is cancelled,

  • a reschedule notice with the new time.

  • "Book appointment" entry in your shop menu

    As soon as at least one appointment type is active, the entry appears automatically in your shop's navigation - on desktop and in the mobile menu. With no active appointment types it stays hidden. If you want it somewhere else in the menu, add it yourself in the shop menu pointing to /termine; the shop then shows only your own entry.

    Open the Knowledge Base →
  • "My Bookings" is no longer a dead end

    Anyone not yet assigned to an appointment calendar only saw "No appointments found" and "No availability configured" - with no explanation and no next step. The page now says what is missing: it shows the appointments of the person linked to your user account in the appointments area. If you may run the setup yourself, a button takes you straight to staff management; everyone else is told to contact their appointment administrator.

    Open the Knowledge Base →
  • A meaningful address for the appointment configuration

    The setup area for Appointment Booking used to sit under the bare address /appointments and told its sections apart only through an add-on (?tab=…). That made the setup page share its address with the product itself. Every section now has its own, meaningful address - for example …/appointments/configuration/staff for the staff members or …/appointments/configuration/calendars for the calendars. From the address bar or a bookmark you can now see at once that - and where - you are in the configuration. Search, page and sort within a section still live in the address, so a copied link shows the same view. Old bookmarks pointing at /appointments?tab=… keep working - they redirect to the new address automatically.

    Open the Knowledge Base →
  • A useful entry point instead of an empty page

    If you have no link but may manage bookings, opening the appointments area now takes you to Booking Management directly instead of the empty personal page.

    Open the Knowledge Base →
  • An empty selection explains itself

    In the Create staff member dialog, the Languages field used to stay simply empty - which looked like a loading error. It now shows a hint pointing to the Languages tab. And the public booking page says that no appointments are currently offered instead of silently staying on step 1.

  • Appointment emails are actually sent now

    Confirmations, reminders, cancellations and reschedules were being created but never delivered - the part that sends them was missing. From now on your customers receive:

  • Appointments can be booked again

    Every appointment is booked in a specific language - and because no tenant ever had a booking language on file, there was no bookable slot anywhere: the public booking page at /termine stayed dead even with appointment types, staff and working hours fully maintained. Every existing and every newly created environment now starts with its own languages, at least German and English, and your existing bookable staff were assigned the default language once. Nothing has to be added by hand. On the booking page nothing used to happen after choosing an appointment type - now it does.

    Open the Knowledge Base →
  • Booking languages come from your language set

    The Languages tab no longer keeps a third list of its own; it shows the languages you already maintain under Settings → Languages. You pick a language there instead of typing a code, and name and code come from your set, so they match the rest of the system. The code now follows the usual spelling (de, en, and pt-br for regional variants) instead of the former capitals. Once a language has been added its code is fixed, while Name and Active stay editable.

    Open the Knowledge Base →
  • Embedding is unchanged

    The booking widget on your own website continues to run through your tenant address and was not affected by the fault.

    Open the Knowledge Base →
  • Existing data is kept

    Existing appointment staff were matched to the right personnel record automatically wherever the match was unambiguous. In doubtful cases the entry stays as a manual one, and you can add the link in the dialog at any time. External people without a personnel record are still handled via Keep without a personnel record.

  • Google synchronisation now runs by itself

    Calendar sync previously had to be triggered by hand in the settings, and the watch channels to Google expired after a week at most without being renewed. A background service now handles both: synchronisation at the interval you configured per connection (default 60 minutes), and channel renewal every hour.

    Open the Knowledge Base →
  • Google Workspace sync prefills the link

    When the sync creates a new bookable staff member and exactly one active employee record carries the same email address and a user account, the link is set automatically. If the match is ambiguous it stays empty and you set it by hand.

  • Holidays are resolved per person

    For linked staff it is no longer a single switch that applies to everyone, but the country and region of their own holiday calendar in HR, and for an approved stay abroad even the residence country, day by day. A team with a colleague in Vienna and one in Munich is therefore only half closed on 3 October. The Holidays tab of Appointment Booking still applies to everyone at once.

  • If the person is missing, create them without leaving the dialog

    Create a new person and Create a new team produce a full record in staff management - not a second one valid only for appointments. The button appears only if you are allowed to manage personnel.

  • Leave, public holidays and Google appointments now block slots automatically

    Until now Appointment Booking only knew about its own absences and holidays. Anyone whose leave was approved in HR still stayed bookable on the public booking page. If a bookable person is connected to their personnel record under Person from staff management, three further sources now feed into availability: approved absences, the holidays of their country, and their Google appointments. Without that link, nothing changes. The block applies to the free slots shown as well as to a booking submitted directly.

    Open the Knowledge Base →
  • No more identifiers in the list

    The staff and team lists showed raw identifiers (long strings such as 3f2a…) instead of readable names in several places. They now show the name, with the department or position underneath where names could be confused. If an entry cannot be resolved, it reads Unknown - never the identifier again.

  • One fixed address for the booking page

    The booking page at appointment.scs.sellerlogic.com loads data again. For your customers, however, the right address is and remains your own shop address plus /termine (see below) - that is also where confirmation e-mails and the embed code point. Until now that address answered the request but could not load any data; appointment types and free slots stayed empty. This is fixed. The spellings booking.… and appointments.… considered earlier do not lead to the booking page; they were never served and never sent in any link. If you noted one of them down somewhere, please replace it once.

  • Only "busy", never "what"

    From calendars, only the busy time span is evaluated. Titles, locations and attendees are never read and appear nowhere in the public booking flow.

  • Reminders survive a reschedule

    When an appointment is moved, the reminders for the old time are withdrawn and re-scheduled for the new one. Reminders for cancelled appointments are no longer sent.

  • Staff and teams now come from staff management

    The appointments area used to keep a second list of its own - anyone created in the personnel file had to be typed in again under Appointment Booking → Staff, and a rename in the personnel area never reached this page. The dialog now has a Person from staff management field: you pick the person, and name and email come from there. Only active people are offered; those who have left no longer appear. When someone is renamed in the personnel area, the name changes immediately in the appointment list, workload view, absences, reports, and appointment emails. The same applies to teams via Team from staff management.

    Open the Knowledge Base →
  • The assigned team calendar now blocks booking times too

    The calendar assignment on the Calendars tab had just been made storable, but at first it only recorded which team works on which calendar. From now on it takes effect: appointments of the assigned calendar's members count as busy time for every member of the team. The note on the tab saying this check was still being worked on is therefore obsolete and has been removed.

    Open the Knowledge Base →
  • The Calendars tab now actually saves - and you pick the calendar

    On the Calendars tab of the appointment settings you could assign a calendar to a booking team, the confirmation appeared - and nothing was stored. The next time you opened the tab it was back to "No calendar". Fixed: the assignment is saved and shown again after a reload. The list offers the calendars of your connected Google account, by name - you never have to type or paste a calendar ID. Add calendar links a calendar that already exists in Google; ones that are already linked are marked. If no Google account is connected, the tab says so and links to the setup. If an assigned calendar was deleted, you now see "Assigned calendar no longer exists" instead of an unreadable ID. The automatic availability check this tab still owed you at that point followed within the same month - see the entry on the blocking team calendar above.

    Open the Knowledge Base →
  • The embedded booking widget works again

    The widget you place on your own website via the embed code showed an error page instead of the booking form - it pointed at an address where the booking page does not live. It now shows your public booking page at /termine on your own shop address, the same page customers can open directly - and on your own custom domain if you use one. The embed code itself does not change, so there is nothing to re-paste.

    Open the Knowledge Base →
  • The link can now be set in the form

    The Staff tab of the appointment settings has a new Linked user/employee field. Use it to assign the user account under which a bookable staff member sees their own appointments. Entries already claimed elsewhere cannot be selected, and people without a user account are flagged as such. The staff list shows the link in its own column.

    Open the Knowledge Base →
  • The personal appointment view follows along

    When you pick a person from staff management, the system sets the user-account link itself - you no longer make the same assignment twice. The Linked user/employee field therefore only appears for entries without a personnel record.

    Open the Knowledge Base →
  • The personal management link is in the email

    The confirmation and reschedule emails carry the link your customers use to view, reschedule or cancel their appointment - exactly the link the handbook already describes. It points at your own shop address (…/termine/…), or at your own domain if you use one.

  • The widget grows with its content again

    The embedded form stayed at the height configured for the widget and cut off longer steps. It now adjusts its height automatically again, as described under "Embed code".

  • The wording is editable

    The five new templates (appointmentconfirmation, appointmentreminder24h, appointmentreminder1h, appointmentcancelled, appointmentrescheduled) ship in German and English under Settings → Email templates and can be edited like any other template.

  • Traceable

    Every appointment email that goes out appears in the email log. If an email cannot be delivered after several attempts, it stays visible in the queue with its error message instead of disappearing silently.

  • Your booking page now lives on your own shop address

    Customers book at https://your-shop-name.scs.sellerlogic.com/termine - or at https://www.your-domain.com/termine if you use your own domain. This is the address for newsletters, email signatures and business cards; it stays the same regardless of your widgets. The personal link for rescheduling or cancelling sits below it (…/termine/b/…).

    Open the Knowledge Base →

CRM

  • Call analyses no longer get stuck at "being analyzed" forever

    A small share of call analyses (about 1%) stayed stuck at "being analyzed" for two reasons: for very long calls, the language model's response could be cut off by its own response-length limit, which was misreported as an "invalid response" - the allowed response length is now generously sized. A separate, rare queueing glitch could also leave an already-transcribed recording never handed off for analysis; a new recovery mechanism now picks those cases back up. A handful of already-affected recordings are being caught up separately.

  • "Mark as spam" in the ticket system fixed

    Both the single-ticket action and the bulk "Mark as spam" action in the ticket list used to end in a server error regardless of which ticket was chosen - the database was missing five columns the underlying service requires. Automatic spam detection for incoming email was affected too: a message detected as spam could not create a ticket. Both paths now work as described in the manual.

    Open the Knowledge Base →
  • Poll frequency for external review sources is now settable (#2882)

    Every review source under "External Reviews" used to be checked automatically on a fixed ~20-hour schedule, with no way to change it. Editing a source now shows a "Poll Frequency" field with "Daily" (unchanged default) and "Weekly" options. "Check now" stays instantly available regardless of this setting.

    Open the Knowledge Base →
  • The last two dropdowns in the customer area are now read out by name (#2859)

    After the big wave in the customer area, two fields in the settings were still left: the signature assignment and the sync interval of the scoring integration. Anyone using them with a screen reader heard nothing but "combo box" there - with no hint of what was being selected. Both now carry a spoken name in German and English. Nothing changes visually. Signatures · Scoring ·

    Open the Knowledge Base →
  • Split, merge and escalate in a ticket can be used again (#2829)

    Opening any of these three dialogs from the ticket detail showed the dialog but left no way out of it: the window sat behind the ticket view, and every click on its close button was caught by the ticket header instead. On a phone the dialog was a dead end. The three dialogs now sit on top of the ticket view, take the full width on phone-sized screens and close on the first tap again.

    Open the Knowledge Base →
  • The CRM's dropdowns are now announced by name (#2859)

    Anyone working the CRM with a screen reader heard only "combo box" in 94 places, with no indication of what was being selected. This affected practically every filter bar and every form in the area: tickets including the sort order and the filters for channel, department, ownership, language and AI assessment, the contact and company lists, the pipeline, subscriptions, campaigns and drip mailings, the knowledge base, reviews, the customer portal with its bug reports, notifications and roadmap, and product adoption with guides, tooltips, segments, A/B tests and selector rules. All of them now carry a spoken label in German and English. Nothing changes visually, and working with a mouse stays exactly as it was. Tickets · Contacts ·

    Open the Knowledge Base →
  • Turning a deal into a quote works again

    In the pipeline, Create quote on a deal used to fail with a server error, in every tenant created since. The cause was in the database: the table the quote number is drawn from had never been created, and the quote itself was missing fourteen fields that are written when it is created, among them the quote number, the customer name, the email address and every amount field. Both are now created when the database is updated. The button creates a draft quote again, with a running number, linked to the deal. Existing quotes are unchanged.

    Open the Knowledge Base →
  • The language chooser in the customer portal is the same everywhere (#2420)

    The roadmap portal used to have two different language choosers: one in the header that showed only the abbreviations "DE" and "EN", and a second one in the profile. Both are now the same building block. The languages are written in their own spelling (Deutsch, English), so they stay readable even if you do not understand the language currently shown. The chooser is fully operable with the keyboard, the focused control has a clearly visible outline, and screen readers announce it by name ("Language"), including in the header where the caption is not visible. The choice takes effect immediately and is remembered on your device. The admin and the shop will get the same building block in one of the next steps.

    Open the Knowledge Base →
  • Light theme now reachable in the roadmap portal, page language matches the display language

  • Roadmap candidates now come from the issue tracker

    The new Source tab in portal management fetches issues that were explicitly marked for the roadmap and suggests a status and release quarter for each. Bug reports do not get through, even when someone marks them: they are listed under Refused with the reason. A candidate is not a card yet - only what you word and approve yourself is ever published. If the issue tracker does not answer, the tab says so explicitly and keeps showing the last successful state instead of an empty list.

    Open the Knowledge Base →
  • The call monitor announces incoming calls again

    The window that pops up on an incoming call with the caller's name and company had gone quiet. The connection to the call channel was never established: the browser could not tell the server which workspace it was reporting for, so the server turned the request away before it ever reached the call monitor. The channel is now opened the same way as every other call in the admin area, and it works again. Two things change for you along the way: your credential no longer appears in the address of the request - it was readable there for intermediaries such as your company network - and opening a page now costs the call monitor one request instead of two. There is nothing to configure; the call monitor reconnects by itself the next time the page loads. Anyone allowed to see calls (permission Read CRM) sees it as before.

  • Call monitor connects reliably again

    The incoming-call display could fail to connect at all in large tenants - the more permissions an account held, the more certain the connection attempt was to fail, and it was retried endlessly. The connection now uses a short-lived access key and works regardless of how many permissions you hold. If it does fail permanently, the monitor no longer retries forever: it stops and shows a notice in the top right with a "Reconnect" button.

    Open the Knowledge Base →
  • Roadmap cards carry German and English separately

    A roadmap card's title and description existed exactly once - the card could not even hold two languages, although the customer portal runs in both. In the card editor you now maintain the text per language, and a language bar shows which one is still missing. Where a translation is missing, the customer does not see an empty card but the source language together with a note that their language is not available yet. Notification emails now name the card in the recipient's language as well.

    Open the Knowledge Base →
  • SELLERLOGIC IDs now link directly

    The UID and CID shown in the contact drawer's "SELLERLOGIC IDs" section now open the customer's SELLERLOGIC backend in a new tab. Both addresses come pre-configured and can be adjusted via the gear icon in the toolbar. Clear a template and the identifier stays plain text - it never becomes a link to nowhere.

    Open the Knowledge Base →
  • Your own call numbers are now visible, other people's stay locked

    On CRM → Calls → Analytics, the Read call performance permission (crm:call-performance:read) used to be all or nothing: without it you could not even see your own numbers. The permission now carries a scope. At "own" you see your own row in the callback backlog and nothing else; the "Top Agents" tile is not shown at all, because a ranking is only meaningful with other people's numbers. At "all" everything stays as before: every owner and the ranking. The scope is enforced on the server rather than hidden in the display - at scope "own" the server's response contains no other names in the first place. Roles that may read calls receive the self-service scope automatically; existing grants at scope "all" are untouched, so nobody sees less than before this change.

    Open the Knowledge Base →
  • "Redeliver" in the delivery log now asks first - and names the target address

    Redelivering from a webhook's delivery log used to fire on the first click. It is not a local retry: the payload goes to the address you configured, carrying a valid signature, and is indistinguishable there from the original delivery - depending on the receiving system it can trigger an order, re-open a case, or create a record twice. Nothing on this screen can recall it. A confirmation now appears before it is sent, naming the event and the target address the signed delivery goes to. Only confirming sends it; cancelling sends nothing. The delivery itself, the retries and the log are unchanged.

  • Deleting in the CRM asks consistently, and names the record

    Email templates, email workflows and adoption segments could be deleted with differing levels of safety - segments with no question at all, the other two through a hand-built window. All three now use the same confirmation, and it names what is about to disappear instead of merely asking "Are you sure?".

    Open the Knowledge Base →
  • Personal call performance data now gated on its own permission

    On CRM → Calls → Analytics, the "Top Agents" and "Callback Backlog by Owner" tiles showed performance numbers for individual, named employees to anyone holding the general read permission for calls, including regular support staff with no lead or management role. Both tiles are now gated on the new Read call performance permission (crm:call-performance:read). The restriction is enforced on the server: calling the underlying endpoint directly without the permission also returns a rejection, never filtered or empty data. Every other tile (total calls, pickup rate, conversion rate, callback backlog total/overdue/trend) stays visible to anyone with read access, unchanged. Who is granted the new permission is decided by your role and permission administration.

    Open the Knowledge Base →
  • Requesting a review now asks first - the mail goes to a real contact

    In the contact detail view under CRM → Contacts, the Request review button sent the request on the first click as soon as exactly one review source carried a link. A misclick could not be taken back - the email was already in the contact's inbox. The button now asks first, and the question names the address the mail actually goes to. Only the confirmation triggers it; cancelling leaves the contact untouched. If several sources are configured, the picker opens as before - the picker is itself the asking and deliberately gets no second dialog in front of it. Editing and saving contact fields still does not ask.

    Open the Knowledge Base →
  • Resolving and closing a ticket now asks first - an email goes to the customer

    In the ticket detail view the Resolved and Close buttons fired on the first click. What few people realised: both automatically send a satisfaction survey (CSAT) by email to the customer. A misclick could not be taken back - the mail was already on its way. Both buttons now ask first, and the question names what is at stake: the ticket concerned, and the fact that a message leaves for the customer. Only the confirmation triggers it; cancelling leaves the ticket untouched. The remaining status buttons (In progress, Waiting for customer, Reopen, Spam) deliberately do not ask - they are reversible at any time, and asking on every single step would only train people to click the question away.

    Open the Knowledge Base →
  • Calls: "My calls" / "All calls" are now one click away

    The call list used to always start unfiltered, and every employee filtered it down to themselves by hand after every login. Two fixed tabs above the filter bar - modelled on the ticket tabs in the Service Desk - turn that switch into a single click. The list still starts on "All calls": nobody loses anything, and covering for a colleague or checking a customer's history remain unrestricted.

    Open the Knowledge Base →
  • Eighteen CRM permissions did not keep the promise the rights screen made

    Under Settings → Users & Roles you could tick permissions such as read/write activities, leads, read/write pipeline, delete contacts, export contacts, delete companies, assign ticket, write adoption and read/manage workflows - but no endpoint ever checked them. Granting one allowed nothing; revoking one forbade nothing. What actually decided access was always the coarse read CRM or manage CRM. Fourteen of them now take effect on their pages: activities, lead scoring, pipeline, contacts and companies, ticket assignment, adoption chapters and e-mail workflows. No role loses anything: the broad read CRM and manage CRM still open everything, and anyone who could write contacts keeps delete and export automatically. Three places change noticeably: the CSV export of the contact list now requires export contacts (the Viewer role does not hold it and can no longer export), assigning a ticket requires assign ticket rather than the general ticket write permission, and Editors can now maintain activities, lead-scoring rules, pipelines and adoption chapters, which previously needed the full manage CRM. Four further permissions stay without effect for now because the surface behind them does not exist: read/write inbox is a second name for the customer inbox permissions that already existed - the menu entry at least follows the ones that actually apply now - and read/write attribution never had a CRM page at all; channel attribution lives in Marketing and is governed by the marketing permissions. Both pairs remain in the list and will be removed in a follow-up step.

    Open the Knowledge Base →
  • Portal e-mails now lead to a real address for freshly created tenants

    As long as nobody had filled in the domain settings, customer-portal notifications - sign-in, status changes, releases, request and bug updates - carried only a bare path with no address, so the link in the e-mail led nowhere. The portal address is now derived from the tenant's short name as well, the same way the admin address already was since the last change, whenever no domain has been configured. A stored custom portal or shop address still takes priority and is left untouched.

  • The call overview can now find calls by customer number (CID) too

    Until now, the calls list could only be searched by name, company, and other fields - the customer number, the fastest and most unambiguous identifier for support, had no way in, which stung especially with unknown phone numbers or companies with several contact people. A purely numeric entry in the general search box is now automatically recognized and matched as a CID; a dedicated "CID / Customer number" field is also available under "More filters". Name search is unchanged - a company with digits in its name is still found.

    Open the Knowledge Base →
  • Placing a call is now a permission of its own - and a double click does not dial twice

    Anyone allowed to set the phone system up was also allowed to dial with it: the same permission opened the configuration page and the click-to-call button. Placing a call now has its own permission, Place a call. Roles that could dial before still can - the new permission was handed to them automatically; what is new is that you can take it away on its own. On top of that, a call request submitted twice no longer opens a second connection: the system answers with the result of the first attempt instead of dialling again.

    Open the Knowledge Base →
  • Calendar dates in CRM, shop and marketing no longer convert to world time

    the collection date of a SEPA direct debit and the due date of an invoice payment, the day axis of the callback report, the default periods of funnel, cohort and marketing reports, and the date in the signature of outgoing messages used to be cut out of world time (UTC). Between midnight and 02:00 German time that was the previous day. Two consequences were expensive: the "five banking days" term was counted on a timestamp in the server's zone and then cut by world time, so the collection date reported to the bank could land on a weekend or a day early; and a due date produced at 00:30 was a day early, which put customers into the dunning run a day early. On top of that, the bar for the current day in the callback curve stayed permanently at zero. All of these now come from the tenant's time zone (Settings > Time zone). Document numbers, export file names and the sitemap lastmod values deliberately stay in world time - only a search engine reads those. Nothing is rewritten retroactively.

    Open the Knowledge Base →
  • Field captions in customer relations are now linked to their field

    Across the CRM pages - tickets, contacts and companies, calls, the knowledge base, email campaigns and rules, subscriptions, reviews, satisfaction, escalation, the support settings and user guidance - the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "Subject, edit box". 291 fields now carry that link. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. Fifteen places sound different: there the heading did not sit above a single input field. Where what follows is only a read-only value or a list - such as "Stages" in the pipeline settings, the "Variants" of a campaign, or a survey's type - it is now read out as ordinary text instead of as the caption of a field that does not exist. Where what follows is a group of several switches or buttons - such as the campaign type, a contact's opt-out switches, a webhook's event selection, or the icon and type pickers in the resource centre - a screen reader now announces a group with that name.

    Open the Knowledge Base →
  • Field captions in the CRM settings are now linked to their field

    Under Settings → CRM - signatures, the Google Mail setup, Google Calendar, the SES configuration and the lifecycle stage editor - the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "Subject, edit box". That link is now in place. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. Three places sound different: the speech recognition provider picker and the AI model picker in the SES configuration, and the colour picker of a lifecycle stage, are not single fields but a group of several buttons; a screen reader now announces a group with that name there. The rich text editor of a signature is not an ordinary input field either - it is now announced with its caption all the same.

    Open the Knowledge Base →
  • Field captions in the list filters are now linked to their field

    In the filters of the contact and company lists - text filter, numeric range, date range, multi-select, yes/no filter and relation picker - and in the tag picker, the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name. That is fixed. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. The range filters sound different: numeric range and date range consist of two fields (from/to); their caption is now announced as a group rather than as the caption of a single field that does not exist as such.

    Open the Knowledge Base →
  • The CRM area now asks before something is deleted or leaves the house

    Across 33 CRM screens - contacts and companies, tickets and ticket templates, live chat, calls, the knowledge base, email campaigns, rules and templates, drip campaigns, segments, contact forms, satisfaction surveys, lead scoring, pipelines, sales automation, support settings and user guidance - 35 consequential buttons now sit behind a confirmation that names the consequence: which record, how many for bulk actions, and who is reached wherever something goes outside. Every browser window has disappeared from the CRM, and so have the two hand-built variants #1916 found there - the overlay without a dialog marker in contacts, and the pipeline buttons that relabelled themselves into their own confirmation on the first click. Confirmations now look the same everywhere and work the same way with keyboard and screen reader. Two actions that had no confirmation at all were noticed on the way and have one now: sending an email campaign to a whole segment, and activating a drip campaign, which then starts mailing every enrolled contact. Eleven panels deliberately get no dialog and now respond to the Enter key instead - there you fill in fields and send them off deliberately, and that send button is the confirmation: logging an activity, editing a call, the bulk action on calls, the editors for email campaign, rule, template and workflow, the rule test run, the knowledge base article draft, and the settings for closing tickets automatically. Deleting a contact used to work only through the multi-select - the button in the individual row had had no effect for some time. It works again.

  • Activities and the call list load again in newly created workspaces

    The activity overview, the upcoming activities and the telephony call list reported a server error in workspaces created since the move to encrypted personal data. They still read the owner's name from the old plaintext fields of staff management. The name now comes from the encrypted fields; the pages load again and show the same name as before.

    Open the Knowledge Base →
  • Customer relations moved to the shared controls (technical)

    Across the CRM pages - contacts and companies, tickets and inbox, calls, deals, email templates and rules, subscriptions and the support settings - buttons as well as input, select and text fields now come from the interface's shared building blocks instead of per-page code. Look and behaviour stay the same; what becomes consistent is keyboard focus, contrast in dark appearance and the behaviour of disabled fields. Icon-only buttons additionally carry a screen-reader label throughout.

    Open the Knowledge Base →
  • Live chat: a transcript now provably belongs to exactly one visitor

    Until now, the identifier of a conversation was enough to read its entire transcript and write your own messages into it - including the other party's name and email address. Anyone who knew such an identifier, for instance from a forwarded link or a server log, reached someone else's support transcript with no further hurdle. From now on, the chat window receives a session proof when a conversation starts. It stays in that one browser and is valid only for that one conversation with that one tenant; it expires after 24 hours. Without it, every request about a conversation is refused - and refused before SELLERLOGIC even checks whether the conversation exists, so the error message gives nothing away either. The same applies to the live connection: a visitor connection now only works inside its own conversation, switching into someone else's is no longer possible. Nothing changes for your visitors: there is still no sign-in, the proof is issued in the background. Only chat windows still open at the moment of the change need to be reloaded once; they then start a new conversation, and the previous transcript stays fully visible to your team.

    Open the Knowledge Base →
  • Unique page titles

    Several help pages carried exactly the same name as a page of the same name in another area, which made them impossible to tell apart in search results and listings. Affected in this area: Subscriptions (CRM), Automation Rules (CRM) and Webhooks (CRM). The page addresses do not change, so saved links and bookmarks keep working.

  • Cards, rows and legends across the CRM now also work without a mouse

    In several places in the CRM, an action could previously only be triggered with a mouse click - anyone working with a keyboard or a screen reader could not get through. That is fixed: a transcript segment in the call detail view now also jumps to the matching spot in the recording with Enter or the space bar, a knowledge base article opens the same way, a section on the knowledge base start page can be expanded and collapsed, a deal on the pipeline board opens its detail view, and a step in the guide editor can be selected. The same applies to tasks in the company file, templates in the email template list, rules in the email rules, a center in the knowledge base management, and the series legend of the subscription charts.

    Open the Knowledge Base →
  • Conversation list in the Customer Inbox now reachable without a mouse

    In the Customer Inbox, a conversation in the list could previously only be opened with a mouse click. Fixed: the row can now be reached with the Tab key and opened with Enter or the Space bar.

    Open the Knowledge Base →
  • Lead scoring settings: number fields no longer lose focus while you type

    Under Settings → CRM → Integrations → Lead scoring, the text cursor jumped out of a weighting field after the first digit, so the remaining digits went nowhere and the value could only be set cleanly with the plus and minus buttons. The cause was that the row was rebuilt on every state change of the page. The rows now stay put: you can type a value as usual, the focus stays in the field, and expanding or collapsing another section no longer interrupts your input.

    Open the Knowledge Base →
  • Contact forms are protected against bulk submissions and now really do notify

    A public form under CRM → Contact Forms is found by automated programs sooner or later. Every submission therefore now runs through three checks your customers never notice - there is still no picture puzzle and no third-party service: an invisible extra field only a program can fill in, a timing check (nobody types a form in under three seconds), and a comparison against the learned spam patterns that already apply to incoming email. In all three cases the sender sees the same success message as always, but no ticket is created - a program that sees an error message would otherwise try the next variant. On top of that, five submissions per minute per sender are allowed instead of the previous hundred. Discarded submissions do not increase the "Submissions" counter. Second change in the same step: the addresses stored under Notification emails were saved but never written to - now every genuine submission sends a message there. Delivery runs after the ticket has been created and never blocks it: if it fails, the enquiry still exists as a ticket.

    Open the Knowledge Base →
  • Historical import of large time windows reliably returns a partial result instead of a network error

    Under Settings → CRM → Integrations → 3CX in Time window mode, a very large window could previously still run into the connection deadline despite the time limit (message "Failed to fetch") or abort with the "window too large" hint and no result at all - because even reading just the first page of data from the phone system was not tied to the time budget. The run now caps every individual step (logging in to the phone system and each page it reads) to the remaining time budget and therefore reliably answers within the deadline. If the time is not enough for the whole window, you get a partial result with the number of calls fetched and processed and a hint to fetch the rest with a smaller window or via "Import full history" - instead of an empty error message. Calls already imported are kept, and the automatic sync every few minutes still resumes exactly where it left off, so no call is lost.

    Open the Knowledge Base →
  • 3CX import finds all calls of a time window again

    Since the evening of Aug 10, the call import wrongly merged all calls of a run into a single one - a historical import spanning two days would report, for example, only "1 calls in the window", and the automatic 5-minute sync also picked up at most one call per run. The cause was a call identifier that the phone system does not populate in its report list; the import treated the placeholder value as a real identifier. The import now recognizes unusable identifiers and falls back to the always-unique record identifier - every call is imported individually again. To recover calls missing since Aug 10, run a historical import in Time window mode; existing entries are corrected rather than duplicated. Two safeguards are new as well: if the phone system reports only 0 or 1 call for a window longer than 24 hours, the result shows an amber warning instead of a silent mini-result; and if the phone system delivers rows without a usable call identifier, the run aborts with a clear error message including an error code instead of creating a merged catch-all record.

    Open the Knowledge Base →
  • Automation system message no longer announces a closure

    When a customer does not reply within the configured period, the automation marks the case as resolved - but the customer-visible system message in the timeline claimed the ticket had been "closed". In fact the case remains open for feedback at this step; it is only closed later by the second automation run. The message now correctly says that the ticket was automatically marked as resolved. In addition, both automation system messages now use a plain hyphen instead of the long dash.

    Open the Knowledge Base →
  • Historical email import reports errors in plain language

    When the historical import under Settings → CRM → Integrations → Gmail or on the mailbox detail page failed, the message could previously appear as a technical placeholder or not at all. You now always see an understandable message: a dedicated hint when you lack the permission, otherwise the server's message, and a translated fallback text when the server provides none. The message also stays visible in the section instead of only flashing up briefly.

    Open the Knowledge Base →
  • AI assistance when recording a bug

    The intake form under CRM → Portal management → Bugs now helps you fill it in. "Prefill with AI" turns your note, the linked support ticket and the linked call into a draft: an internal and a customer-facing title, a summary, suggestions for severity, area and product, plus the template fields observed behavior, expected behavior, steps to reproduce and environment/version. Along with it come a "What is still missing?" list and up to three suggested questions to the reporter that can be adopted into the question feature with one click. Everything stays a suggestion: every item has its own "Adopt", next to it there is "Adopt all", and the bug is only created when you click "Record" - nothing is saved automatically. Only products that actually exist in your setup are suggested; if none fits, the field stays empty. Second, SELLERLOGIC checks the existing reports while you type the internal title and shows up to five similar bugs under "Possible duplicates" with similarity in percent, status and severity, each of which can be opened directly - this runs by calculation only and causes no AI costs. Before the analysis, the system removes email addresses, phone numbers, IBANs, long digit sequences and credentials and replaces them with placeholders; internal ticket notes are not included at all. Triggering the draft requires the permission to manage bugs, read access is enough for the duplicate display. If no AI assistance is available or the monthly budget is used up, the form says so in plain words and you fill it in by hand as before.

    Open the Knowledge Base →
  • Ask a single reporting contact a question

    If a detail is missing while you work on a bug, you can now ask for it directly. In the detail panel of a bug under CRM → Portal management → Bugs, the new "Question to one contact" section lets you pick exactly one of the contacts linked to the bug and send them your question. The question is emailed to that one contact only; there is deliberately no broadcast to all notified customers. The contact sees the question in the customer portal on the page of their report and answers it there exactly once; the answer then appears in the bug's timeline, visible to your team and to the contact who was asked, never to other customers and never in the public "Known issues". While an answer is outstanding, the bug list shows the new "Questions" column with the count and the opened bug shows the "Open questions" notice; both disappear once the answer arrives. Asking a question requires the permission to manage bugs; read access is enough to follow along.

    Open the Knowledge Base →
  • Call list: talk times are now correct, and sync outages no longer leave gaps

    Two defects in the 3CX integration are fixed. First, the call list under CRM → Calls showed 1 minute for almost every call, because for calls routed through a queue only the first leg of the call was counted; the actual talk time is now captured to the minute across all legs. Second, calls could be lost for good when the synchronization with the phone system was temporarily down (for example during an update); the sync now reliably remembers where it stopped and catches up on the entire missed time window after an outage. Calls that are still in progress at sync time are completed automatically with their end time and real duration once they finish. To correct already imported calls with a wrong duration, re-read the affected period via the manual synchronization - existing entries are corrected in place, not duplicated.

    Open the Knowledge Base →
  • Catch up on calls for a specific time window

    The phone system's backfill now has two modes. Under Settings → CRM → Integrations → 3CX, tab Configuration, section Historical Import, the mode Time window is new and preselected: you enter From and To with date and time - for the first time to the minute rather than by whole days, in your own time zone - and catch up on exactly that period from the phone system. Existing calls are corrected instead of duplicated, and the ongoing automatic sync is left untouched, so no new gap appears. The result is shown right in the section, for example "Import finished: 12 new, 3 updated, 15 calls in the window."; the calls then appear under CRM → Calls and in the activities. The previous route is now called Full Import and remains unchanged as the tracked job across the entire history with a progress bar, pause, resume and cancel - the right choice for the initial load. Also new is that you get any feedback at all: while the run is working the section shows "Import running - reading the time window from the phone system …", afterwards the result or a plain-language error message (missing permission, no 3CX connection set up, phone system unreachable). Until now a failure stayed invisible and the button appeared to do nothing. The chosen time window is kept in the address bar and survives a reload or sharing the link. Starting the run requires the permission to manage the CRM or write access for telephony.

    Open the Knowledge Base →
  • CRM now works on a phone

    The CRM pages with special layouts now work on a smartphone (390px) and tablet (768px) without the whole page shifting sideways. The pipeline board scrolls within its own area; on touch devices you move a deal card by pressing and holding it for a moment and then dragging - a plain swipe still scrolls the board. In the ticket detail view the conversation gets the full width on narrow screens; the two side columns (the case's other tickets and the ticket details) open via two new buttons in the header. Wide tables - a subscription's billing periods, the ticket list on the support dashboard, the cohort matrix and tables inside email content - scroll in their own container instead of being cut off on the right. In the customer inbox, list and conversation stack vertically on a phone, and the guide editor shows step list and preview in a single column; its actions are always visible on touch devices instead of only on mouse hover.

    Open the Knowledge Base →
  • The customer portal for roadmap and bug reports now works on a phone

    The header carried up to seven navigation items plus the brand, the language picker and sign-in on a single, non-wrapping line - that needs roughly 1200 pixels, which was not always available even on a desktop and pushed the whole page sideways on a phone. On narrow screens the navigation now sits behind a menu button; above that it stays a bar that scrolls within itself if needed instead of taking the page with it. Filter rows, search fields and forms (report a bug, submit a request, profile) take the full width on a phone and stack vertically. Long titles, comments and e-mail addresses wrap instead of running past the edge. Buttons, vote arrows and select fields have a finger-friendly size.

    Open the Knowledge Base →
  • A status change made directly in the bug board now notifies as well

    When a staff member set a report's status directly in the board to In progress, Resolved or Closed, no customer email used to go out - only the route via the update composer triggered the send. Now every change into one of these three states notifies the affected customers who have notifications on, no matter which route was taken. No double send occurs: if an update contains a customer-facing text AND a status change, each recipient still receives exactly one email. Every email carries the unsubscribe link. A change to Confirmed and a purely internal note still trigger nothing.

    Open the Knowledge Base →
  • Affected customers now learn about a report the moment it is filed

    Until now the first email only went out with the first update. From now on the reporter (for a report filed via the customer portal) and the customers assigned by support who have notifications on receive a confirmation right when the report is created, letting them know it has been logged and that you will inform them automatically once there is news. The internal title stays protected: assigned customers without a customer-safe title see a neutral placeholder, and the reporter sees their own submitted title.

    Open the Knowledge Base →
  • Bug intake with context

    Recording a bug in the bug tracker is now complete: straight from a call or a support ticket, "Record bug" opens the intake form with company, contact and the call or ticket reference already prefilled. Also new are structured details following the official template (observed behavior, expected behavior, steps to reproduce, environment/version - all optional) and internal attachments: screenshots and files can be stored on the bug, and when starting from a ticket you can adopt existing ticket attachments by selection. Attachments and structured details are visible to your team only and never appear in the customer portal.

    Open the Knowledge Base →
  • Email attachments keep their original name

    When downloading an attachment from a ticket, the file is now saved under its original file name instead of the technical storage name. Umlauts in the file name are preserved.

  • Call details stay usable even when transcript data is faulty

    When a call's transcript segments were stored in an unexpected format, the entire call detail view crashed with an error message - analysis, rating, notes and recording became unreachable as well. Now only the transcript section shows a notice in such a case; all other details of the call remain visible and usable. In addition, the application automatically sanitizes such faulty legacy data when delivering it.

    Open the Knowledge Base →
  • Consistently "Company"

    The CRM entity is now labelled Company everywhere in the German interface as well ("Unternehmen") - in lists, filters, columns, search, deal views, portal reports, product analytics and email variables. Previously the German labels alternated between two different words for the same record. Only the address fields on invoices and in the checkout keep their postal wording. Labels only - no data and no workflows change.

  • Straighten out existing calls with swapped speakers in one go

    With new transcripts now assigning speakers based on the call direction, the older stock remained open: earlier transcripts still carried the previous AI guess, in which "Employee" and "Contact" could be swapped. Under CRM → Calls → Analytics the new "Speaker roles in existing transcripts" block shows how many of your existing transcripts still carry an unverified mapping - grouped into "direction present and contradictory", "direction missing" and "no speaker labels". A "Dry run" shows in advance how many calls a run would correct without changing anything; "Apply correction" straightens the affected existing transcripts based on the call direction (translation included), without re-transcribing and therefore with no AI costs. The correction is logged, requires write permission for calls, and only touches unverified transcripts - a second run does not flip already-corrected calls again. Genuine doubt cases (no recorded direction) stay flagged as "Speaker mapping unverified" and can still be corrected individually in the call detail via "Swap speakers".

    Open the Knowledge Base →
  • Call transcripts assign the speakers correctly again

    "Employee" and "Contact" were regularly the wrong way round in the transcript - names included. The transcript therefore stated literally the opposite of the conversation, which also skewed call analyses and every later quotation. The cause was that the roles were guessed from the conversation content alone. From now on the call direction decides: whoever answers speaks first - so on an outbound call the first voice is the contact, on an inbound call it is your team. If someone introduces themselves using the responsible employee's name, that evidence counts on top. When the mapping cannot be backed by evidence, the note "Speaker mapping unverified" appears next to the "Transcript" heading instead of silently asserting a wrong mapping. For existing calls there is a new "Swap speakers" button: it flips the roles throughout the transcript (translation included), can be undone with a second click, and is logged.

    Open the Knowledge Base →
  • The English interface really does speak English in the CRM now

    If you switched the language to English, several CRM areas still showed German labels - most visibly in the ticket detail view. Affected were the ticket sidebar ("Priorität", "Komplexität", "Fällig", "Abteilung", "Zugewiesen"), the split and merge dialogues including their explanatory texts, the snippet and template pickers in the reply box, the chat area, the email-rule editor together with all field and comparison labels, the picker in the condition row, the pipeline settings, the placeholders on the reputation page, the subscription flow diagram, and the tiles on the support overview and the sync health page. Those texts were hard-wired into the program and bypassed the language switch; they are now maintained in German and English. Nothing changes for the German labels.

    Open the Knowledge Base →
  • Automatic ticket assignment and the workload overview run again

    The "Round robin" and "Least busy" assignment strategies as well as the per-agent workload overview failed with a server error for every group that had members, leaving tickets unassigned. Both strategies distribute again, and the workload overview shows figures again.

    Open the Knowledge Base →
  • Blocked numbers can be maintained again

    On the CRM → Blocked Numbers page neither adding nor unblocking a number was possible. New is the "Block number" button above the list: you enter the phone number and a reason and can now block numbers for which there is no call at all. The entry is validated immediately, so an unusable number is never sent off. On top of that, roles holding the overarching CRM management permission saw no buttons whatsoever even though they are allowed to use them; that is fixed. If unblocking fails, you now get a message instead of nothing.

    Open the Knowledge Base →
  • Cleaner lists and detail views without initials circles

    Names used to be preceded by a colored initials circle - it has been removed everywhere in the CRM: from the contact list, the contact and company detail views, the deal list and the cards on the deal board, and the "Agent performance" report. The views show the name directly, so rows take up less horizontal space.

    Open the Knowledge Base →
  • Notifications about new external reviews arrive again

    When a new review came in from Trustpilot, Google, Capterra or the Amazon Appstore, it was stored, but nobody in the configured recipient list was told about it - neither by in-app message nor by email. The recipients you configured on the review source are notified again.

    Open the Knowledge Base →
  • Search in activities works again

    As soon as you typed a search term under CRM → Activities, the list answered with a server error instead of results. Without a search term the list behaved normally. Searching across subject, description, company and contact name returns results again.

    Open the Knowledge Base →
  • The adoption cohort report shows figures again

    The user-retention report aborted as soon as a calendar week contained any users at all - in practice, always. The report calculates and displays again.

    Open the Knowledge Base →
  • The Gmail inbox processes incoming mail again

    Syncing a connected Gmail mailbox aborted before a single message was turned into a ticket. From your side it simply looked as if nothing arrived from that mailbox any more. The cause was a faulty hand-over of the collected thread and sender identifiers to the database. Incoming messages are turned into tickets again and matched to existing threads and known contacts.

    Open the Knowledge Base →
  • Unsubscribing from roadmap cards works again

    Customers could subscribe to a roadmap card but never end the subscription: both the click on the card and the unsubscribe link in the email ran into a server error. Both routes end the subscription again.

    Open the Knowledge Base →
  • "Known issues" returns to page 1 when the product changes

    Customers who had paged to page 3 in the portal and then switched products saw an empty list, because the page number stayed put. Switching products now starts at the first page again.

  • Adoption: the code snippet for your shop is now called SCSAdoption

    The snippet under CRM → Adoption → Adding it to your shop now goes by the name SCSAdoption instead of V3NDRAdoption. The old name stays on as a second name and points at exactly the same place. Snippets you have already embedded, and your own calls such as V3NDRAdoption('lang','de') on your pages, therefore keep working unchanged, even if you never swap anything out. If you are placing the snippet afresh anyway, please use the new name: the command overview on the same page already shows it. The address the snippet is loaded from has not changed.

    Open the Knowledge Base →
  • Affected customers hear about bug updates

    when you write an update on a bug report with a customer-facing text and/or set a new status, that information goes out automatically by email to all assigned and reporting customers. A purely internal note still triggers nothing, and every customer can unsubscribe per report.

    Open the Knowledge Base →
  • Answers to your own requests arrive by email

    whoever submitted a feature request is now informed automatically: when the request moves into review, when it is accepted and connected to a roadmap card, when it is declined with a reason, and when there is an official comment from SELLERLOGIC. You do not have to write a message for this. The notification is on by default and can be switched off in the portal profile with the "Notification about own requests" toggle.

    Open the Knowledge Base →
  • Customer portal: "Known issues" is publicly reachable again

    The public "Known issues" page of the roadmap portal wrongly asked for a sign-in and stayed empty for visitors who were not signed in. The cause was an access check scoped too broadly, which also covered pages that are meant to be public. The known-issues list and detail view are freely readable again, just like the public roadmap and the release archive. The visibility rules are unchanged: issues rated critical stay out of the public view until they are resolved, and personal areas (reporting an issue, "My reports", feature requests, voting, profile) still require a sign-in.

    Open the Knowledge Base →
  • Feature requests can no longer slip into an impossible state

    A declined request could afterwards be set to accepted without any roadmap card being linked to it. The lifecycle of a request is now fixed: Accepted arises only through the linking wizard, Declined only through declining with a reason, and both end states stay put.

    Open the Knowledge Base →
  • Follow roadmap cards

    signed-in customers can now follow a published roadmap card and choose separately whether they want to hear about status changes or about the release by email. One click on the card is enough, a second one ends the subscription. Every notification carries an unsubscribe link, and the new My subscriptions section in the portal profile lists all active subscriptions for removal. Without a deliberate subscription nothing is sent.

    Open the Knowledge Base →
  • Help button points at the right page

    On the requests page the help button led to the customer-portal manual page instead of the requests page. Both manual pages now have an unambiguous assignment.

    Open the Knowledge Base →
  • Manage products yourself

    The roadmap and known issues are structured by product, but products could not be created until now. The new Products tab allows creating, renaming, sorting, activating and deactivating. There is no delete, so cards and bugs already assigned keep their assignment.

    Open the Knowledge Base →
  • New "Notifications" view in the admin

    under CRM → Roadmap portal → Notifications you see who follows which roadmap card (filterable by card, customer, company and kind, with a CSV export of the subscriber list) and which notifications actually went out: event, template, language, recipient, time, status and, for failures, the reason. The page is for information only; there is deliberately no button to send anything. Read access to "Roadmap Portal" is enough to view it.

    Open the Knowledge Base →
  • No duplicate sends

    every notification that goes out is recorded. The same event never reaches the same person twice, no matter how often an action is repeated. A failed send is marked as such and retried with the next event.

  • Open panels on the bug board can now be linked

    On the "Portal bugs" page, the detail panel and the panel for recording a report kept their state in memory only. A copied link opened an empty list for the recipient, and the browser's back button skipped straight past the open panel. Both panels now live in the address bar: a shared link opens the same view, and going back closes it again. Your filters and page number are preserved.

    Open the Knowledge Base →
  • Portal emails are editable like every other template

    the five new templates for sign-in, status change, release, request update and bug update exist in German and English under Settings → Email templates and can be reworded there. Sending always uses the language the customer selected in their portal profile.

  • Portal management: everything about the customer portal on one page

    Maintaining the customer portal was split across two menu entries in two different areas. Both now sit together under CRM → Portal management, divided into the tabs Roadmap content, Feature requests, Bugs, Moderation and Products. The selected tab is stored in the address bar, so you can bookmark it and pass it on. Your existing bookmarks keep working and open the matching tab.

    Open the Knowledge Base →
  • Re-importing the call list no longer fails with "Failed to fetch"

    A re-import covering a large time window (a full day, say) ran long enough for the connection to be cut off in transit - the app showed nothing but an obscure network message, and whether anything had been imported stayed unclear. The run now stops by itself in good time and tells you how many calls out of how many were taken over, together with a note to fetch the remainder using a smaller window or via "Import entire history". That import runs in the background and is not time-limited. Calls already taken over are kept; the regular sync that runs every few minutes resumes exactly where it left off, so no call is lost. If the phone system does not answer at all, you now get a clear error message instead of a hanging display.

    Open the Knowledge Base →
  • Release quarter instead of a date

    For released cards you choose quarter and year, not a calendar day. The entry is mandatory for status Released, because the release archive is grouped by quarter.

    Open the Knowledge Base →
  • Reported content becomes visible again

    Customers could report posts, but the application had no place where those reports showed up. The new Moderation tab lists all open reports with reason and timestamp and lets you resolve them.

    Open the Knowledge Base →
  • Reports about requests and comments are now guarded

    When reporting a contribution, there was no check whether the reported item existed at all or was visible to the reporting person, and there was no upper limit. Both are in place now: only what you are allowed to see can be reported, and at most 20 reports per day and account are possible.

  • Roadmap cards can finally be created in the application

    Until now cards could only be created directly in the database, which is why the roadmap in the customer portal stayed empty. The new Roadmap content tab brings a list and an editor: customer-facing title and description, product, status, release quarter, plus a switch that adds a card to the roadmap or withdraws it again. Publishing requires a customer-facing title and description so no half-finished card reaches the outside.

    Open the Knowledge Base →
  • Signing in to the customer portal now actually works

    the 6-digit sign-in code was created but never sent, so in practice nobody could get into the portal. Your customer now receives the sign-in email immediately, with the code and a link that signs them in directly. The code is valid for 15 minutes and can be used only once. If sending fails for once, the code stays valid and can be requested again.

    Open the Knowledge Base →
  • Status filter in "My reports" in the customer portal

    The portal already evaluated a status filter from the address bar but offered your customers no control for it. There is now a select field for the processing status above the list; the selection goes into the address bar and can be shared. An unknown value in the address bar is silently ignored instead of causing an error.

  • The customer portal stays usable when data is missing behind the scenes

    If part of the roadmap portal was missing from a tenant's data store, the public roadmap, the release archive, the product list and "Known issues" all answered with a generic server error - so for visitors, a gap in the master data looked like a complete outage. Those pages now show an empty list, and detail pages report "not found". Your operations team is not left in the dark: the fault is still logged and appears in the platform's error overview. All other faults (a dropped connection, for example) are still reported as errors and are never silently presented as "empty".

    Open the Knowledge Base →
  • The customer portal's error page speaks English too

    The fallback page shown after an unexpected error was hard-wired to German. It now follows the language selected in the portal.

  • The help button in the roadmap portal opens the right guide

    On the "Roadmap portal" page, the "?" button led to the customer-portal guide instead of the guide for the review queue. The two manual pages are now cleanly separated and cross-linked.

    Open the Knowledge Base →
  • Ticket routing now takes language into account

    Assignment used to go by skills alone - language was part of the calculation but had no effect, because no member of staff had any languages recorded. Language is now a genuine exclusion criterion: anyone who does not speak the required language is neither suggested nor auto-assigned, whatever their skills. In the “Assign agent” area you set the ticket's required language (pre-filled from the automatic detection, correctable at any time) and use “Show agent languages” to record which languages the assigned member of staff speaks. Anyone with no languages recorded is still suggested - recording languages narrows the pool, it never locks anyone out. If nobody speaks the required language, the mask says so along with the number of staff skipped, and the ticket stays assignable by hand. For existing staff the languages are taken over once from the personnel record. Which languages are selectable is not built in and can be recorded in the support settings.

    Open the Knowledge Base →

ERP

  • The document archive checks retention and integrity for real again (#1496)

    Four related

  • Every dropdown in ERP is now read out by name (#2859)

    After the customer area and the HR area, ERP follows: anyone using it with a screen reader heard nothing but "combo box" in 46 places - with no hint of what was being selected. Almost every filter bar in the area was affected: bank accounts and bank transactions, cashflow with its payment calendar and scenarios, liquidity and bank reconciliation, journal entries and the DATEV export, sales channels, e-invoicing, receipt capture, anomaly detection, smart categorization, price recommendations, batches and serial numbers, stocktaking, wave picking, tiered pricing, location groups, routing rules, document sequences, document management with signatures, procurement with suppliers, supplier products and supplier invoices, purchase orders, quotes and shipping labels. All of them now carry a spoken name in German and English. Nothing changes visually, and mouse operation is unchanged. Banking · Procurement ·

    Open the Knowledge Base →
  • Every dropdown in the warehouse tabs is now read out by name (#2859)

    The filter bars of the three warehouse tabs were left out of the previous round, because they live in a different place technically than the rest of the ERP pages. They have now caught up: anyone using warehouse management with a screen reader heard nothing but "combo box" in 7 places - with no hint of what was being selected. Affected were bins with their zone and bin status, stock levels with stock status and movement type, and warehouse tasks with task type, status and priority. All of them now carry a spoken name in German and English, and where several dropdowns sit side by side the names are deliberately distinguishable instead of saying the same thing three times. Nothing changes visually, and mouse operation is unchanged.

    Open the Knowledge Base →
  • lexoffice sync no longer shows fabricated results

    Invoice, customer, and credit note sync, as well as batch sync, used to report a fabricated "synced successfully" confirmation with a fabricated lexoffice ID (lexinv..., lexcon..., lexcn...) for every transfer, even though not a single HTTP call was made to the lexoffice API. Batch sync also reported a fabricated success count. This was the same class of bug as the already-fixed connection check (see the 2026-08-17 entry) - carrying extra risk for an accounting integration, in case someone relied on a supposedly successful invoice transfer. All four features now show only the honest notice that sync is not available yet; the count of orders found during batch sync remains a real measurement, but none of them are reported as transferred.

    Open the Knowledge Base →
  • Purchase orders now announce themselves for approval

    Until now a submitted order sat quietly at Pending approval until somebody looked into the list of their own accord. From now on it appears as a process in the responsible person's worklist, with the order number and the supplier. Responsible is the supervisor of whoever submitted it - derived through the user account, the personnel record and the management line - and only if they hold the approve purchase orders permission. If that chain cannot be closed, a defect is recorded and nobody is notified; there is deliberately no round-robin mail to everyone who may approve. The process disappears by itself as soon as the order leaves that status, no matter who approved, rejected or cancelled it. The first run also picks up the orders that were already waiting. The notice deliberately names no amount: it would stand still while the order changes.

    Open the Knowledge Base →
  • The last dropdowns in ERP are now read out by name (#2859)

    This step completes the area. Caught up are the filters and forms that sat outside the warehouse tabs: invoices, credit notes, customer segments, fulfillment, locations, inventory with product stock and stock history, VAT management, dunning with its sort order, and returns with reason and item condition. Anyone using them with a screen reader heard nothing but "combo box" there - with no hint of what was being selected. All of them now carry a spoken name in German and English. Nothing changes visually. Invoices · Inventory ·

    Open the Knowledge Base →
  • "Add line item" on a purchase order works again (#2836)

    On the detail view of a draft purchase order, "Add line item" never created a line. The product name you typed was not sent at all, and the order was given an empty product reference - every attempt ended in a generic error message without saving anything. The form now offers the same product search as creating a new purchase order: you pick the product from the catalog, name and SKU are taken over, and the unit price is prefilled from the catalog price. As long as no product is selected, the button stays inactive.

    Open the Knowledge Base →
  • A direct debit return is only receipted once it has actually been booked (#2820)

    Reporting a return for a collection that did not exist - a typo in the reference, a collection belonging to a different merchant, an id from an old list - still produced the message that the return had been booked. Nothing appeared in the direct-debit overview afterwards, dunning never started, and nobody had a reason to look. From now on the call answers "not found" in that situation, before anything counts as done. The regular path is unchanged: a return for an existing collection is booked with its reason as before and shows up in the overview immediately. The same check now also applies where a merchant attaches evidence to a dispute - a dispute that does not exist answers "not found" instead of a system error.

    Open the Knowledge Base →
  • A goods receipt is now created completely or not at all (#2834)

    When an item failed while a goods receipt was being recorded, the interface reported an error - but the goods receipt header had already been written. What stayed behind was a goods receipt without a single item, holding a used-up document number from the WE- range. It counted in reports, it showed up in lists, and nobody could tell it apart from a real receipt - even though no goods had arrived at all. Document number, header and items are now written together: if anything goes wrong, no goods receipt is created and the number stays available. The same applies to changing the status of a goods receipt and to adding a single item afterwards. On top of that, invalid unit costs are now rejected with a clear message instead of ending in a server error.

    Open the Knowledge Base →
  • A purchase order is now created completely or not at all (#2816)

    When a line failed while a purchase order was being created, the interface reported an error - but the order header had already been written. What stayed behind was a purchase order without a single line, worth 0, holding a purchase order number that was used up. It counted in reports, it showed up in lists, and nobody could tell it apart from a real order. Header, lines and totals are now written together: if anything goes wrong, no purchase order is created at all and the number stays available. The same applies to duplicating an order, deleting a draft, approving and rejecting, and recording received quantities. On top of that, every purchase order line now needs a product from the catalogue; without one the input is rejected with a clear message instead of ending in a server error.

    Open the Knowledge Base →
  • Accounting reports now stay inside one chart of accounts (#2839)

    If you keep several charts of accounts side by side, SKR03 and SKR04 for instance, the same account number was allowed to appear in each of them - and the reports did not tell them apart. The trial balance listed the accounts of every chart in one report, and for a number that exists in more than one chart the name and the account type came from an arbitrary one. In the account ledger that weighed heavier: the account type decides whether a balance is read as a debit or a credit balance, so the sign turned around as soon as the type came out of the wrong chart. Both reports now answer for exactly one chart. You can name it; if you do not, the first chart you actually keep applies. Movements that are already booked are still shown in full, even when their number is not in the chosen chart - a report that silently hides a booking would be the worse mistake. Also fixed: an unused account could not be deleted as soon as some other chart of accounts had bookings under the same number. The lock now protects the account in question instead of the bare number; it still holds where the bookings cannot be attributed to one chart beyond doubt.

    Open the Knowledge Base →
  • All nine reference types usable for journal entries (#2817)

    A journal entry could only point at a customer order, an invoice, a refund or a manual booking. Linking it to a supplier invoice, a purchase order, a credit note or a dunning notice instead ended in a server error on save and no entry was created - exactly the four links the reference type exists for. All nine types are now stored, and together with the year-end closing they are also offered in the filter above the list and in the selection when creating an entry by hand.

    Open the Knowledge Base →
  • An aborted supplier creation no longer uses up numbers (#2846)

    When a supplier was created, the supplier number (LIF-…) and the creditor number (K-…) were drawn before the supplier itself was written, and each of the three steps ran on its own. If the write failed, both numbers were used up anyway: the numbering was left with a gap that afterwards could not be told apart from a deleted supplier. For accounting that is a real difference, because a gap in the creditor range has to be explainable. Drawing the numbers and creating the supplier now happen in one go: if the creation is aborted, both counters stand exactly where they stood before. The same applies when creditor data is added to an existing supplier. Also fixed: if two people created a supplier at the same time, both could be handed the same LIF- number; the second creation then ran into an error message although nothing was wrong with it. Simultaneous creations now receive different numbers.

    Open the Knowledge Base →
  • Journal lines stay within one chart of accounts (#2818)

    If you keep several charts of accounts side by side (say SKR03 next to SKR42), a journal entry could be booked against an account number that only one of the other charts carries. The entry was accepted, and the account name of that foreign chart was written into the journal line - afterwards nothing in the ledger showed that something was off. A journal entry now belongs to exactly one chart: lines that do not add up within a single chart are rejected with an error message, and the account name always comes from the chart the entry is booked in. Existing entries are left untouched. Journal entries ·

    Open the Knowledge Base →
  • Missing default data now reaches partly set-up tenants as well (#2847)

    If you had already created an account or a language of your own in a new tenant before the default data ran through for the first time, the rest of it never arrived: one single entry of your own permanently locked out the full chart of accounts, the language list and the booking languages, without any notice. From now on each group is looked at on its own. Whatever is missing entirely is filled in; whatever you removed yourself stays removed and is instead reported in the operations log as incomplete, rather than passing silently as "all fine".

    Open the Knowledge Base →
  • Purchase order matching in receipt capture finds orders again (#2832)

    The "Match purchase order" button reported no matching order for every receipt and added a note claiming the purchase order module was not available yet. Neither was true: the search read two fields of the purchase order that never existed, and the resulting database error was turned into an empty result list. The match now searches by the supplier on file, returns results again, and shows each order with its supplier name and total. A genuine failure is no longer presented as "no matches" but reported as an error.

    Open the Knowledge Base →
  • Purchase-order overview metrics show the real numbers again

    The tiles above the purchase-order

  • Stock levels, batches and serial numbers are reachable again (#2837)

    The stock list of a location, the low-stock list, the stock movements and both the batch and the serial-number views ended in a server error instead of showing your data - in every workspace. The cause was a query reading the product name from a field the database never had. It now reads the maintained product name of the respective language: preferably in your workspace's default language, otherwise from another maintained language, and if an article has no maintained name at all, its article number stands in the label - never an empty field. Searching the stock list of a location now matches exactly the label the list displays. This is the same rule the warehouse, the stocktaking and the shop's cart already use to label their positions.

    Open the Knowledge Base →
  • Stocktaking and inventory valuation are reachable again (#2831)

    Opening a stocktaking, starting it, completing it, reading its report and calling up the inventory valuation ended in a server error instead of the data - in every workspace. The cause was a query reading the product name from a field the database never had. It now reads it from the maintained product name of the respective language: preferably in your workspace's default language, otherwise from another maintained language, and if an article has no maintained name at all, its article number appears in the label - never an empty field. The position list of a stocktaking is therefore sorted alphabetically by that label again. This is the same rule the warehouse and the storefront cart use to label their positions.

    Open the Knowledge Base →
  • Suppliers and creditor data can be created, opened and edited again (#2868)

    Supplier management was entirely unusable. The supplier list would not load, a single supplier could not be opened, and every attempt to create or change a supplier ended in an error message. The same applied to the "Creditor" tab with its bookkeeping details such as creditor number, payment method, early-payment discount, credit limit, dunning block and delivery terms: nothing could be saved there, because the database had never been given room for those details. The room is there now, and the creditor number is assigned automatically again when a supplier is created. Also fixed: entries the form explicitly allows were rejected by the database. This affected long VAT identification numbers, long city and region names and phone numbers at the length limit; bank details and tax numbers could not be stored at all, because both are kept encrypted and encrypted values need more room. All of it fits now. Supplier data already stored is unchanged and needs no rework.

    Open the Knowledge Base →
  • The SEPA batch run can no longer leave a half state behind (#2821)

    When a batch file was generated, the named collections were first marked as "submitted" and the batch file was written only afterwards. If that second step failed, the collections stood in the books as if they were at the bank - although no file had ever been produced. A second attempt did nothing, because it only picks up open collections. What changes: the status change and the batch file are now created together or not at all. If anything fails, the collections stay open and can be submitted again straight away. What you see in the overview: the reported number, and the number of transactions in the PAIN.008 file, now name the collections that really went into the run rather than the number requested. Naming a collection that has already been submitted no longer produces a file claiming more transactions than it carries. Existing cases: collections left stuck on "submitted" by the old defect are set back to "open" automatically at the next service start - they are recognised by the fact that no batch file exists for their batch reference. Collections with a real batch file are left untouched.

    Open the Knowledge Base →
  • Warehouse tasks, barcode scanning and the goods receipts are reachable again (#2823)

    Opening a warehouse task, the task list, the barcode scan, the contents of a bin, a goods receipt, a packing station and a return receipt answered with a server error instead of their data - in every workspace. The cause was a query that read the product name from a field the database never had. It now reads it from the maintained product name of the respective language: preferably in your workspace's default language, otherwise from another maintained language, and when an article has no maintained name at all, its product number becomes the label - never an empty field. This is the same rule the shop cart uses to label its lines.

    Open the Knowledge Base →
  • Tab strips in ERP views unified and keyboard operable (#2023)

    Twenty ERP views used to draw their own tab strip - Banking, Liquidity, Cashflow, Warehouse, Wave Picking, Procurement, Shipping Carriers, Document Management, DATEV Export, E-Invoicing, Lexoffice, Channels, Anomaly Detection, Demand Forecasting, Price Recommendations, Receipt Capture, Smart Categorization, quote details and location details. They now all use the same interface building block. What visibly changes: spacing and the blue tone of the open tab are identical across all views from now on, which makes some strips slightly more compact than before. The tabs themselves, their order, their labels and their content are unchanged. What is new: the strips can be operated entirely from the keyboard (arrow keys, Home, End), screen readers announce them correctly as a tab strip, and a strip with many tabs now scrolls sideways instead of cutting labels off.

    Open the Knowledge Base →
  • Acknowledging and resolving now carry your name (#2540)

    Who acknowledged a liquidity alert, who resolved an anomaly alert and who changed a marketplace commission rule used to be taken from the caller's request instead of from the signed-in session. Any caller could therefore have an arbitrary other name recorded, and the audit trail then carried the forgery as truth. All three are now taken from your sign-in without exception. Also fixed: the "Acknowledge" button on a liquidity alert did not work at all - it sent no name, which the endpoint insisted on, so it ran into an error message. It now acknowledges the alert and records you as the acknowledging person.

    Open the Knowledge Base →
  • Filters in the stock history are now checked (#2356)

    The stock adjustment history allowed filtering by product, location and adjustment type without checking the values. A malformed product or location id caused a server error, and an unknown adjustment type was silently ignored - the list came back unfiltered while looking filtered. Both are now rejected with a proper error message.

    Open the Knowledge Base →
  • List pages across ERP now honor the selected page size

    Lists such as Dunning,

  • "Send invoice" on draft orders now asks first - and names the recipient

    Under ERP › Draft orders, the paper-plane icon in the row mailed the invoice straight to the customer with no question asked. It was the only action on that screen whose effect leaves the house - "Convert to order" and "Delete" right next to it had been asking all along. A confirmation window now names the recipient address; only the second click sends. A sent invoice cannot be recalled. Also new: under ERP › Transfers, removing a line item from a saved transfer now asks, because the expected and received quantities booked against it disappear with the row; and under ERP › Tax rules, removing a tax registration now asks, because its registration date and threshold for that jurisdiction go with it. Line items of an unsaved draft are still removed without a question.

    Open the Knowledge Base →
  • Deleting a draft order now demands the "Delete orders" permission (#2222)

    Permanently deleting a draft order rode along on the Edit orders permission, although the permission editor offers a dedicated Delete orders permission that nobody ever checked. The delete permission now counts. Of the shipped roles, super administrator and administrator delete; an editor still creates, changes, cancels and converts drafts - only the permanent delete is out of reach.

    Open the Knowledge Base →
  • The "Export analytics" permission now genuinely governs only the CSV download

    The report export under Reports → Export CSV used to check the general read permission for analytics, not the dedicated export permission built for it - a role with the read permission but not the export permission could still download CSV files. Nothing changes for the shipped roles: the export permission is still automatically derived from the analytics read permission. You will only notice this on a custom-built role or permission override that deliberately took the export permission away - that revocation now actually takes effect.

    Open the Knowledge Base →
  • The dunning run can be started again by the role that owns it (#2219)

    The Start dunning run button demanded an operator-plane permission behind the scenes, although the run only ever processes your own dunning cases. Since the permission change of 21 Aug no tenant role carries such a permission any more - a click therefore ended in a generic failure message, even for accounts that may otherwise send reminders, pause cases and write them off. The only accounts still getting through were Owner and Super Administrator, because those bypass the permission check altogether. The same bar as for every other dunning action now applies: Edit payments. Nothing about the run itself changes, and the hourly automatic check kept running regardless.

    Open the Knowledge Base →
  • The granular ERP permissions now actually take effect (#2220)

    Under ERP the permission matrix has always offered a separate permission per area - warehouse, stocktaking, picking, inventory, purchase orders and dunning, each for reading and for editing. Granting or revoking them changed nothing so far: the pages only ever checked the coarse umbrella permissions above them. A role given nothing but "Edit warehouse" hit an error on its first click, and revoking "Read picking" locked nobody out. Twelve of those permissions are now checked on the pages they belong to. Nobody loses access - the previous umbrella permissions keep working and open exactly the same pages as before. What is new is that you can genuinely limit a role to a single ERP area. For Invoices, Accounting and Cashflow things stay as they are for now; since the permission change of 23 Aug those pages are reserved for the Super Administrator, and the menu entries now say so correctly instead of leading to an error message.

    Open the Knowledge Base →
  • Sending an invoice is now a permission of its own - and a second click does not send it twice

    Until now a single permission ("Edit invoices") opened both: changing the draft and mailing the finished invoice to the customer. Sending now has its own permission, Send invoices; the edit permission alone is no longer enough. Roles that could send before still can - the new permission was handed to them automatically. What is new is that you can take sending away on its own, without taking editing with it. On top of that, send, finalize, record payment and refund a credit note now carry a repeat marker: if the same operation is submitted a second time - double click, dropped connection, another attempt - the system answers with the result of the first attempt instead of repeating the action. One mail goes out instead of two, an invoice number is drawn once, and a payment is booked once.

    Open the Knowledge Base →
  • Stock reconciliation: warehouse stock and sellable stock are now checked against each other regularly

    The warehouse stock from inventory management and the sellable stock on the product are kept separately - which is why they can drift apart, for instance when a stock booking is lost in transit or an outgoing movement was stopped at zero. Until now that only came to light when somebody looked. Under Warehouse → Stock reconciliation a regular pass now reports every deviation, lists it per product with both figures side by side, and notifies you when it finds one. The automatic pass only reports and changes nothing. A correction is something you start deliberately; it pulls the sellable stock up to the leading warehouse stock - and only where the deviation is unambiguous. Three cases are deliberately left untouched and merely reported: a stock booking still in transit, a product without any location record, and warehouse stock for a product the shop does not know.

    Open the Knowledge Base →
  • Calendar dates in finance and operations no longer convert to world time

    the invoice date and due date of the electronic invoice (ZUGFeRD/XRechnung), the month buckets of the liquidity forecast, the periods of the warehouse KPIs, the 30-day revenue curve, the due list in cash flow, the thresholds of the liquidity alerts and the default periods of the reports used to be cut out of world time (UTC). Between midnight and 02:00 German time that was the previous day, with three concrete consequences: an invoice created at 00:30 carried yesterday's invoice date (at the turn of a month or year, in the wrong VAT period), every month bucket of the liquidity forecast started on the last day of the previous month, and in the 30-day revenue curve the bar for the current day stayed permanently at zero because its key never matched the database's. On the warehouse cards, "last 7 days" and "completed today" contradicted each other. All of these now come from the tenant's time zone (Settings > Time zone). Document numbers, export file names and values that come straight out of a date column deliberately stay in world time. Nothing is rewritten retroactively - documents already produced stay as they are.

    Open the Knowledge Base →
  • ERP operations now ask before something becomes final

    Eight actions in the warehouse, stocktaking, receipt capture, liquidity planning, document management and quotes used to fire on the first click. Affected were: cancel a warehouse task, cancel a running stocktaking (throws away every quantity counted so far), extract a receipt and reject a receipt in receipt capture, delete an alert rule in liquidity planning, delete a document and delete a retention policy in document management, and delete a comment on a quote. Each of these now shows a prompt naming what is affected - the task with its product, the stocktaking with its name, the receipt with its document number, the rule and the document with their names, the comment with its author and the beginning of its text. Uploading a receipt deliberately gets no prompt: there you fill in a form, and its "Create" button is the prompt - it now also responds to the Enter key, which it did not before.

    Open the Knowledge Base →
  • Field captions in draft orders, dunning and inventory are now linked to their field

    In the draft orders (address, create customer, create draft and detail page), in dunning (create and detail view) and in the inventory (stock adjustment, inventory list, product view, transfer) the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "Subject, edit box". That link is now in place. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. One place sounds different: above the adjustment mode in the stock adjustment there is no input field but a row of choice buttons. A screen reader now announces it as a group with that name.

    Open the Knowledge Base →
  • Field captions in ERP are now linked to their field

    Across the ERP pages - balance sheet, profit and loss, journal entries, DATEV export, e-invoicing, liquidity planning, cashflow, scenarios, banking with accounts, import and reconciliation, receipt capture, lexoffice, purchase orders and supplier invoices, quotes, tiered pricing, price recommendations, batch and serial tracking, stocktaking, demand forecasting, anomaly detection, smart categorisation, routing rules, wave picking, locations and location groups, shipping carriers and document management - and in the warehouse area (stock levels, bins, receiving, pack station, returns, warehouse tasks, cycle counting, analytics and location details), the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name. 252 fields now carry that link. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. Twelve places sound different: where what follows the caption is a group of several controls - the entry type and the recurring-rule type in cashflow, the scenario type, the stocktaking type, the picking strategy, the import format and the drop zone in the banking import, the data sources of smart categorisation, the discount field of a purchase order, the customer picker in a quote, and a shipping carrier's credentials - a screen reader now announces a group with that name instead of reading out a caption with no field behind it.

    Open the Knowledge Base →
  • Field captions in ERP are now linked to their field

    On the B2B companies, invoices, credit notes, returns, transfers, locations, customer segments, payment dashboard, import / export, global tax rules, export controls and sanctions and vendor KYC screening pages, the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "Company name, edit box". 89 captions now carry that link. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. Four places sound different: there the caption does not sit above a single input field but above a group of several controls - the colour swatches of a customer segment, the line items of a credit note, the export format picker, and the payout schedule in the payment dashboard. A screen reader now announces a group with that name.

    Open the Knowledge Base →
  • Field captions in invoice creation are now linked to their field

    In the Create invoice drawer (customer search, invoice recipient, line items, tax scenario, payment term, notes) and in the Record payment dialog under Invoices, the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name. That is fixed. Nothing changes visually - captions, spacing, colours and field sizes are unchanged.

    Open the Knowledge Base →
  • Invoicing now asks before money or a document leaves the house

    Ten actions in invoicing used to fire on the first click - no prompt, no way back. Affected were: issue a credit note (draws the final document number), refund a credit note (moves real money back), mark an invoice paid, finalize an invoice (draws the final invoice number), send invoice on a draft order (mails the invoice to the customer), send reminder in the dunning case list and in the case detail, capture payment, and remove a line item from an order. Each of these now shows a prompt that names the consequence - with document number, amount and, where something goes outside, the recipient address. "Capture payment" and the payout settings deliberately get no extra dialog: there you have already filled in fields, and the send button of that dialog is the prompt - it now also responds to the Enter key.

  • ERP, warehouse, dunning and draft-order areas moved to the shared interface controls (technical)

    In the ERP sub-areas (accounting, procurement, goods receipt, banking, the Mirakl connection, quotes, document management, shipping carriers), in inventory, dunning, draft orders and the invoice dialogs, buttons as well as text, choice and multi-line fields now come from the shared interface toolkit instead of each page carrying its own code. Look and handling stay the same; what becomes consistent is keyboard focus, contrast in dark appearance and the behaviour of disabled fields. The tables in these areas have not been moved yet and will follow later.

  • Stock levels now use expandable rows from the shared toolkit

    The table under Warehouse → Stock levels now uses the same table component as the rest of the interface - the shared toolkit gains expandable detail rows for the first time. The arrow at the start of a row expands or collapses a product's location breakdown, is reachable by keyboard, and announces its state for screen readers. Loading state and pagination now follow the same look as other lists built on the toolkit.

    Open the Knowledge Base →
  • Unique page titles

    Several help pages carried exactly the same name as a page of the same name in another area, which made them impossible to tell apart in search results and listings. Affected in this area: Activity Log (ERP), Reports (ERP) and Locations (ERP). The page addresses do not change, so saved links and bookmarks keep working.

  • Warehouse area moved to the shared interface controls (technical)

    In the warehouse area - stock levels, bins, goods receipt, pack station, returns, warehouse tasks, cycle counting, analytics and the location details - buttons as well as text, choice and multi-line fields now come from the shared interface toolkit instead of each page carrying its own code. Look and handling stay the same; what becomes consistent is keyboard focus, contrast in dark appearance and the behaviour of disabled fields. The tables in this area have not been moved yet and will follow later.

    Open the Knowledge Base →
  • Goods receipts now post stock in a traceable way

    Accepting a goods receipt now creates a stock movement with location and reference document, instead of a silent posting that never actually arrived. This concerns background processing; nothing changes in how you use the interface.

    Open the Knowledge Base →
  • Liquidity alerts now actually create a notification

    When a liquidity rule under Finance → Liquidity planning triggers, the alert now appears in your notification area - with rule name, metric, current value and threshold, classified as urgent for critical rules. Until now the notification was discarded on write without any error message: the alert fired and was logged, but nobody saw it. Repeated triggers of the same rule within five minutes refresh the existing notification instead of stacking up.

    Open the Knowledge Base →
  • Stock bookkeeping for transfers and returns reworked (technical)

    The sales stock of a product is now updated by the product area itself when a transfer is received and when a return is restocked, triggered by a command from the warehouse area. Quantities and timing are unchanged; the rework prepares the separation of the business areas into individual services. If the same command is delivered twice, it takes effect only once.

  • The lexoffice page no longer shows fabricated results

    The connection check under "lexoffice" used to report a green "Connected" badge with a fabricated organization and tax type for any API key of at least 10 characters - regardless of whether a real lexoffice account existed behind it. A webhook URL was confirmed as "successfully registered" without lexoffice ever being notified. That was a fabricated display, not a real check - carrying extra risk for an accounting integration, in case someone relied on a supposedly verified connection. The page now shows only an honest notice that the lexoffice connection has not been set up yet; there is currently no real connection check and no real webhook registration.

    Open the Knowledge Base →
  • List rows and calendar cells are now usable from the keyboard

    In the routing rules overview, in stocktaking, in the payment calendar and in the product picker for purchase orders, clickable rows and calendar cells can now be reached without a mouse - tab to them and trigger with Enter or the spacebar.

    Open the Knowledge Base →
  • System event for picking tasks now names the right task

    When a picking task is created automatically after a payment is received, the internal system event now reports the identifier of the created task instead of the order. Previously the two reporting paths (immediate notification and event outbox) carried different identifiers; reports or future automations looking up the task through it would have come up empty. Nothing changes in how you use the interface.

  • ERP lists now work on a phone

    The accounting and warehouse pages with special layouts now work on a smartphone (390px) and tablet (768px) without the whole page shifting sideways. Wide tables - the pick list of a running picking wave, the invoice list with its expandable line items, a credit note's line items, the validation history of a VAT ID, the per-location stock in the product drawer, and the AI categorization and price recommendation lists - scroll in their own container instead of being cut off on the right. The seven-day payment calendar keeps its minimum width and scrolls within its own area on narrow screens; the three monthly key figures above it stack vertically on a phone.

    Open the Knowledge Base →
  • Invoice downloads and SEPA files with meaningful names

    Invoice PDF and XRechnung downloads now use the file name provided by the system instead of a technical identifier. The SEPA direct-debit file is now named “sepa-lastschriften-<date>.xml” instead of the internal batch ID.

  • Invoice creation: consistent labels

    The company field of the invoice recipient now carries the standard postal label in German, and the capitalisation of invoice line items in the English interface has been unified to "Line items". Labels only - nothing changes in behaviour.

  • Journal entries: consistent wording for reversals

    When reversing a journal entry, the reason field in the German interface is now labelled Stornierungsgrund, matching the wording already used in purchasing. The accounting terms for the reversal entry and the reversal invoice remain unchanged; they name the operation, not the reason.

  • Saving multiple tags on projects, tasks, stock transfers and B2B accounts works again

    Creating or editing a project or project task, a stock transfer or a B2B customer account failed with a server error as soon as you assigned more than one tag. A single tag or none at all could still be saved. The cause was the same faulty hand-over of the tag list to the database as with the bulk actions. Tag lists are now saved correctly - including special characters such as commas or quotation marks.

  • Bulk editing of products, orders and customers works again

    Selecting several entries in the lists and starting a bulk action failed with a server error - this affected every action: change status, set or adjust price, assign category, set tags, assign customer group, archive and delete. Individual entries could still be edited; only the bulk action always came up empty. The cause was a faulty hand-over of the selection to the database, so the action never ran at all. All bulk actions now go through again.

  • Creating a wave from selected picking tasks works again

    Under Warehouse → Wave picking, creating a wave manually from several selected tasks failed with a server error. The selection is now handed over to the database correctly and the wave is created.

    Open the Knowledge Base →
  • CSV export of the demand forecast with a product filter works again

    Under Analytics → Demand forecasting, the export failed as soon as you narrowed it down to specific products. The export now completes with a product filter as well.

    Open the Knowledge Base →
  • Lowest price of the last 30 days is determined again in product lists

    The batch price-history query that derives the lowest price of the last 30 days for several products at once failed. It returns values again.

  • Price recommendations for a product selection work again

    Under Pricing → Price recommendations, generating recommendations failed as soon as you narrowed it down to specific products. Without that restriction the run completed. The restriction now works again.

    Open the Knowledge Base →
  • Supplier names in the purchase-order list are shown again

    Under Procurement → Purchase orders, the supplier column stayed empty in the list because the names were no longer loaded in the background. No error was shown - the list simply looked incomplete. The names are back.

    Open the Knowledge Base →

HR

  • Approver and absence deputy now stand explained side by side (#1148)

    The "Position" tab of an employee showed two nearly identical people pickers with no explanation at all - which is exactly where the recurring confusion about who actually decides a request came from. Both fields now carry a hint, and above them the tab names the three roles that may decide: the approver as a rule, the absence deputy while the approver is away themselves, and the HR department, which decides company-wide through the "manage HR" permission. The old hint on the deputy field explicitly denied the deputy any say; that was no longer true - the deputy may decide, and is shown the request while the approver is away. The same hints now appear when creating an employee, and the absence deputy carries one English name everywhere ("Absence deputy" instead of "Absence Manager" in one place). Nothing changes about who may decide - only about whether the form says so.

    Open the Knowledge Base →
  • New dashboard tile "Useful Links"

    The employee portal dashboard now has a way out - a tile linking to this help centre and to the HR release notes. The release-notes link opens a new browser tab. There is deliberately no roadmap link here: the roadmap is a customer offering, not a staff area.

    Open the Knowledge Base →
  • Every dropdown in HR is now read out by name (#2859)

    After the employee list, the rest of the area follows: anyone using it with a screen reader heard nothing but "combo box" in 76 further places - with no hint of what was being selected. Practically every filter bar and form was affected: absences with their calendar, requests and carry-over, time tracking and project time, onboarding and offboarding, recruitment and the selection pipeline, training, surveys, feedback and performance reviews, compensation, salary bands and supplements, procurement, IT assets, expenses, locations, cost centres, tasks, succession planning, career frameworks, the org chart, shift planning, public holidays, the audit trail, document templates, custom fields, webhooks, workflow templates, the whistleblowing system, and self-service with residence permits, surveys and change requests. All of them now carry a spoken name in German and English. Nothing changes visually, and mouse operation is unchanged. Absences · Time tracking ·

    Open the Knowledge Base →
  • Onboarding steps now announce themselves

    Until now SCS created all steps of an induction at once, each with its own due date - and nothing happened on the due date. From now on a step that is due and still open appears as a process in the responsible person's worklist, with the name of the step, the new joiner's name and the due date. Who is responsible is decided by the step's template: the supervisor, the new joiner themselves, or HR. If it says IT or Custom without a named person, this is recorded as a defect instead of being sent to everybody. One induction produces several entries, because its steps belong to different people. The entry carries no state of its own: "done" is always read off the checklist, and the process disappears by itself once the step is completed or skipped, or the induction ends.

    Open the Knowledge Base →
  • Open timesheets now announce themselves

    Until now it only came out at some point that a month that was over had never been signed off - usually when somebody needed it for payroll. From now on a month without a sign-off appears as a process in the supervisor's worklist, with the name and the oldest missing month. It stays one process per person even when several months are missing; it then also names how many there are and only disappears once no elapsed month is left open. The running month never counts, and SCS looks back over three elapsed months. If twenty timesheets are open for one manager, they stay twenty individual entries but produce exactly one bundled mail a day. Somebody who records no time in SCS gets no notice at all; if no supervisor is on record this is noted as a defect instead of being sent to everyone with HR permissions.

    Open the Knowledge Base →
  • "Completed by" on a workflow step now comes from the sign-in (#2540)

    Who completed or skipped a step under HR › Workflows was taken from the caller's request instead of from the signed-in session. Any id at all could therefore be recorded as the completing person, and the audit trail of the personnel case then carried that entry as established fact. The completing person is now always the signed-in user. Nothing changes in the form; existing entries are untouched.

    Open the Knowledge Base →
  • A project's member list loads again (#2753)

    In project time tracking the Members tab of every project stayed empty and reported a system error - whether or not anybody was assigned to the project. The cause was a query reading the job title from a personnel-record field that never existed there, so the database rejected it on every call. Anyone who wanted to know who books time on a project had to go the long way round via the time entries. The title now comes from the position on the personnel record, the way it does everywhere else in the HR area. The list shows name, project role, job title and the hours booked so far again; members who have left stay hidden as before, and the hours they booked stay with the project. Members could always be added, changed and removed - the result simply could not be looked at.

    Open the Knowledge Base →
  • Changes to project members and tasks only report real hits (#2804)

    In project time tracking four actions reported success even when they had changed nothing at all: editing and removing a project membership, and editing and deleting a task. It affected anyone who addressed a membership or task of one project through the path of another - after switching projects in an open tab, for instance - or who used an id that no longer exists. The foreign row was never changed by this, which was and remains safe; only the feedback was misleading. The answer in those cases is now "not found". The normal path is unchanged: your own memberships and tasks can be edited, removed and deleted as before.

    Open the Knowledge Base →
  • The employee list's dropdowns are now announced by name (#2855)

    Anyone working the employee administration with a screen reader heard only "combo box" on several dropdowns, with no indication of what was being selected. This affected the department filter and the employment-type filter above the list, the document-type filter in the employee record, the role picker on the "Roles" tab, and the two dropdowns for the public-holiday calendar and for assigning a holiday by hand. All six now carry a spoken label. Nothing changes visually.

    Open the Knowledge Base →
  • The team calendar's week view no longer shifts the page sideways (#2829)

    On phone and tablet widths the whole page could be pushed to the right while the team calendar was open in its week view; measured, the content reached about 245 pixels past the edge on a 390-pixel screen and about 111 pixels past it on a 768-pixel one. The cause was an invisible screen-reader label on the weekend and public-holiday columns that escaped the grid's own horizontally scrollable box. The week grid now scrolls inside that box only, and the page itself stays put. Nothing about the calendar's appearance changes.

    Open the Knowledge Base →
  • "Requires approval: no" now actually does something

    an absence type's approval requirement could be switched off for a long time, and nothing happened. Every request was still filed as Pending and had to be approved by hand. From now on, picking a type without an approval requirement means the request is approved right away: the entitlement is booked at the same moment, the shared absence calendar is kept up to date, and nobody lands in an approver queue. While creating a request, the interface says so right below the absence-type selection. So that it stays traceable that a rule decided here and not a person, such a request shows "automatically (no approval required)" under "Approved by", and the audit trail records the event with the source System and the reason "no approval required". Types that do require approval - including the shipped defaults "Urlaub" (vacation) and "Krankheit" (sickness) - behave exactly as before. Requests already pending are not rewritten retroactively; if you set this option earlier, review it once.

    Open the Knowledge Base →
  • A newly picked absence calendar no longer stays empty

    Approved absences used to travel into the shared Google calendar only at the moment of approval. Flipping the Absence sync target switch today therefore produced an empty calendar - every leave approved earlier was missing, and stayed missing until some new request happened to be decided. Below the switch there is now Catch up existing absences: one press pushes every approved absence that still lies ahead and reports how many were transferred. The button may be pressed repeatedly - what is already in the calendar is not created twice. For a sick note the catch-up transfers only that the person is away, never the absence type; the reason stays out of the company-wide calendar. Only approved absences are caught up - a reported but undecided sick note still does not appear there. Appointment booking was never affected by the gap: it reads absences straight from the HR area and blocks the times even when the calendar does not know them.

    Open the Knowledge Base →
  • Date and time fields in HR now follow your application language

    In 29 HR screens the date fields came straight from the browser. That made the order of the numbers depend on the browser language rather than on the language you set in SCS: anyone using a German interface on an English browser saw mm/dd/yyyy inside an otherwise German form and entered dates wrongly. Your own language setting now decides the order and the separators. Affected screens include the employee record (personal data, position, contract, compensation, leave), team time tracking, the change-log export, absence planning, the holiday calendar, expenses, IT assets, remote work, goals and project time. The precision can now be stated as well: an appointment with a time of day - the workflow reminder, the scheduled feedback session, the due date of an HR task - is captured to the minute, while a plain calendar day stays day-precise. The fields behave as before otherwise: you type the numbers one after another, move between day, month and year with the arrow keys, and can count any segment up or down with them.

    Open the Knowledge Base →
  • Eight absence types are now available in every workspace

    Vacation, Sick Leave, Special Leave, Parental Leave, Unpaid Leave, Training, Remote Work and Business Trip. Until now the "Absence Types" tab was empty in newly created workspaces, and without a single type no absence request could be submitted and no quota could be set up. Existing workspaces have the missing types added once; types you have renamed, recolored or deactivated stay untouched.

    Open the Knowledge Base →
  • Expiring contracts now announce themselves

    Until now somebody had to remember that a fixed term was ending - in a calendar, in a list of their own, or not at all. From now on a fixed-term contract appears in good time as a process in the supervisor's worklist, with the name, the end date and how many days are left. The lead time is not one fixed number but the notice period of that particular contract - and never less than 30 days - so the full notice period is still available when the notice arrives. The process disappears by itself once the contract is renewed, made permanent or superseded; if the deadline has already passed while the contract is still active, it deliberately stays on the list. If no supervisor is on record this is recorded as a defect - there is deliberately no round-robin email to everyone with HR permissions.

    Open the Knowledge Base →
  • Invalid dates in the HR area are now named instead of being rejected as a system error (#2509)

    Entering something that is not a date into an HR form - a typo such as "31/13/2026", text pasted from a spreadsheet, a day that does not exist ("30 February") - used to produce a generic system error in many places. The entry was only rejected at the very end by the database, and the message named neither the field nor the fact that your input was the cause; it looked as though the system was broken. Affected areas included the team calendar, career steps, cost-centre assignments, onboarding, surveys, training sessions, HR tasks, reports, the pay-gap module, the shift overview and portal time tracking. The entry is now checked straight away: you get a response that names the field concerned, so you can correct it without guessing. Valid entries are unchanged - values that carry a time of day (an HR task's due date, a training session) still accept both a date and a time.

    Open the Knowledge Base →
  • One email a day instead of one per process, and supervisors can see their team's worklist

    Two changes to the process register, shipped together. First, the bundling: until now every process sent its own email - an approver with twenty open requests got twenty mails in a single morning. From now on you receive exactly one summary per day listing every process that has arrived since the last one, however many that is; there is no threshold and no mixed form. Your worklist is unchanged by this: every process still gets its own entry there, and the number on the bell still counts them one by one. Only the sending is bundled. The price is stated openly: in email form an urgent process waits for the next summary - on the worklist it appears without delay. A process kind you have switched off does not appear in the summary at all. Second, the team view: under Settings › Notifications › My team's worklist, supervisors can now see what is waiting on the worklists of the people who report to them. Access does not come from a new permission somebody could grant, but from the supervisor field in the employee record - if nobody reports to you, the page says so and shows nothing. Because an entry reveals who asked for what, every visit to the page is written to the audit trail, not just a change; the page says so before you look. Nothing can be decided here - "Open process" leads to the source, where the rules of the respective area apply. An absence deputy does not inherit this view: they still receive the affected processes on their own worklist and need no foreign list for that. A change of reporting line takes effect at once in both directions - hand a team over and you immediately lose sight of the old entries too; take one over and you see its open entries straight away. Finally, archive retention has been decided: nothing is deleted, and that question will be answered for every area at once rather than for the process archive separately. My team's worklist, Process notifications,

    Open the Knowledge Base →
  • Product entitlement during an impersonation session: a notice instead of an error

    While someone from operations temporarily works as another user, rights administration is blocked for the whole session - this protects the account being worked in. The "Roles & Permissions" tab offered the entitlement anyway: the checkboxes could be ticked, "Save unlocked products" could be pressed, and only then came an error. A notice now appears in that place from the start, explaining the block and naming the way that does work: from the tenant's own login, without an impersonation. The permissions below are shown but not editable during an impersonation. A failure also produces just one message instead of two, and it is in the language you have set.

    Open the Knowledge Base →
  • The Microsoft calendar can now be connected - first step: sign-in and consent

    Until now SELLERLOGIC Commerce Services only knew Google for calendars. Under Settings → CRM → Integrations, tab HR, there is now an additional Microsoft Calendar card. You enter your organisation's directory id there, along with the application id, secret and redirect address from your app registration in Microsoft Entra ID. The secret is stored encrypted in your tenant and never leaves the server. Test connection checks the credentials against Microsoft right away, and Prepare consent gives you the link an administrator of your directory uses to grant consent once for the whole organisation. An expiring access token is renewed automatically; if consent is withdrawn, the connection says so explicitly instead of failing silently. What this step does not do yet: busy times are not read yet and approved absences are not written into the Microsoft calendar yet - both follow in the next steps. The Google connection is completely unaffected.

    Open the Knowledge Base →
  • The rejection reason of an absence is now asked for, and it arrives

    Until now the reason stayed empty on every rejected absence - both the employee portal and the detail view in the administration showed "no reason given". Two things were missing: the interface never asked for a reason at all, and the text would have been discarded silently on its way to the server under a wrong field name - no error, no log entry. Both are fixed. Reject now opens a window with a Rejection reason field (optional, up to 2000 characters); whatever you enter there is shown to the requester in the employee portal and to you in the Decision section. Leave the field empty and neither place shows an empty section, and the rejection goes through as before. Approving and cancelling keep the plain confirmation.

    Open the Knowledge Base →
  • Three more pages now tell "My Area" apart from the employee portal

    "Adjust leave entitlement manually" and "Payroll" still named the employee portal as a usable surface; the page "Inbox and team status (supervisors)" described two portal cards as if they lived in the admin interface, and pointed at an admin address that does not exist. All three now carry the same "in preparation" note as the other portal pages.

    Open the Knowledge Base →
  • Two default values of the absence types are pulled forward once

    Vacation gets a cap of 30 days per year, and Sick Leave becomes approval-free. This only happens where the value is still the untouched shipping value - if you entered 25 days for Vacation, or changed Sick Leave yourself, your value stays as it is.

    Open the Knowledge Base →
  • An absence request now also reaches the deputy while the line manager is on leave themselves

    Until now a filed request landed solely in the worklist of the direct line manager. If that person is away on the day it is filed - that is, on an approved absence of their own covering today - the case additionally appears for whoever is listed under the Position tab as absence deputy. That is deliberately this person and no one else: they are also the only other person allowed to decide the request at all. The case does not move away - the line manager keeps it and finds it on their list on their return, and the three-day deadline runs on unchanged. If no deputy is recorded, everything stays as before; a request is never lost because of this. Leave the line manager has merely requested, and that has not been approved yet, does not count as being away - someone who has only asked is still at their desk.

    Open the Knowledge Base →
  • Rights in two steps - products first, permissions second

    When inviting an employee it was not possible to choose which modules they may use at all; the dialog only asked for a role, and the permissions appeared out of nowhere. The invitation dialog now asks for the products first (HR, CRM, Shop, ERP, Marketing, Tasks, Appointments, Sign, DMS, Settings) and for the role only afterwards. The "Roles & Permissions" tab of the employee record carries the same two steps: the unlocked products at the top, and below them only the permissions of those products. Removing a product revokes its permissions - including the ones an assigned role carries; the remaining products are untouched. Preset: with no choice of your own, a new employee gets the User role (read and write in their own area) and the products that have an own area. Nobody can end up in the system with an empty interface any more - the previous state looked like a broken application when it was simply a missing permission.

    Open the Knowledge Base →
  • Whoever starts a workflow no longer approves it themselves

    The approval chain of a workflow step was missing the four-eyes principle. Whoever had started a workflow could sign it off; if the workflow concerned that person, the "Manage HR" permission let them do the same. On a level requiring a single approval, that was a complete self-approval. The same rule as for absences and expenses now applies here: "Approve" and "Reject" are blocked for the creator and for the person concerned, with a hint naming the reason, and the attempt is refused through the API as well. In addition, starting a workflow now records who actually created it - that value could previously be sent along and therefore chosen freely. Tenants that switched the four-eyes principle off under "Approval settings" are unaffected.

    Open the Knowledge Base →
  • Adding a holiday now sits above the list

    In the employee file under People → Employees, tab Absence, section Holidays, the "Manual assignment" and "Self-created holiday" inputs used to sit permanently below the year list - a full German holiday calendar runs 10 to 15 rows, which you had to scroll past first. Both inputs now sit behind an "Add holiday" button in the section header and open directly underneath it, before the list - the same shape as the create form in the Contract tab (see the 2026-08-25 entry). While the form is open, the same button reads "Close". The open state is kept in the address bar, so it survives a reload and can be shared. Nothing changes about the order of the holiday list itself - it stays chronological.

    Open the Knowledge Base →
  • Approval levels block completion until they are satisfied

    Approval levels configured for a step were stored but never checked - any task could be completed without a single level having agreed. Such a step now shows its approval chain with the state of every level. Levels are decided in order, every approval is recorded under the signed-in account - each person counts once per level, and only the last satisfied level completes the task. Completing by hand is refused until then, with a hint naming the missing level; skipping remains possible.

    Open the Knowledge Base →
  • Approvals are now decided by the responsible line manager, no longer by anyone holding the permission

    Until now the approval permission alone was enough, in most HR areas, to decide any case of any person - across departments and including expense pay-outs and salary supplements. Whoever holds only the area key (for example "Approve expenses") now decides exclusively for their own employees, meaning everyone who lists them under the Position tab as line manager or absence deputy. The HR department ("Manage HR"), owners and super administrators keep their tenant-wide reach unchanged. This covers benefits, expenses, time tracking, procurement, project time, residence change requests and compensation supplements; absences have followed this rule since 25 Aug 2026. If a manager's account is not linked to an employee record, the decision is refused rather than allowed. Bulk approvals of project and working time are all or nothing: if a batch contains one foreign entry, the whole batch is refused.

    Open the Knowledge Base →
  • Balance forecast to a chosen date

    Under My absences there is now a new "Balance forecast" panel above the year view. Pick a future date and instantly see how many days remain per absence type at that point in time - including a breakdown of which approved absences were counted. An open, not-yet-approved request is shown separately and is not deducted from the projected balance. If the chosen date falls after last year's carry-over expiry cutoff, the forecast shows the expiring days. A date in the past or a year with no quota set up shows an explanatory hint instead of a wrong number. The chosen date lives in the address bar - the link can be shared.

    Open the Knowledge Base →
  • Changes to bank, tax and insurance details now appear in the audit trail

    Who changed an employee's bank details, tax data, social insurance, emergency contact, identity document, residence permit, qualification or language record could not be established afterwards - the audit trail stayed empty for these operations while looking complete. All twelve operations in these areas now write an entry with the user, the time, the kind of change and the names of the changed fields. The values themselves are deliberately kept out of the trail: IBAN, tax ID, insurance number and document numbers are stored encrypted, and in clear text in the trail they would no longer be. What is now traceable is who changed which field, and when.

    Open the Knowledge Base →
  • Conditions now actually branch the workflow

    Conditions with a follow-up step configured in a template used to be pure configuration - a completed step always led to the next step in order, whatever was configured. When starting a workflow you can now supply instance data in the form name=value; completing a step evaluates that step's conditions against it. If one matches, the steps jumped over are marked "Skipped by branching" and the configured follow-up step becomes the next open item. A branch only ever moves forward, so two conditions pointing at each other cannot send the workflow round in circles.

    Open the Knowledge Base →
  • Employee record: Finance and Qualifications are reachable again, employment type and dates editable again

    Two finished tabs were missing from the tab bar of the employee detail view - "Finance" and "Qualifications". Both existed in the system but could not be opened by any route. As a result, bank details, tax data, insurance, language skills and agent skills could not be maintained in the interface at all. Both tabs are now in the bar. In addition, employment type, hire date and end date could no longer be changed after an employee had been created - a value set incorrectly once stayed that way for good and quietly went stale when somebody moved from part-time to full-time. The three fields now sit on the "Position" tab and can be corrected there with the "edit employees" permission; without that permission they are shown read-only.

    Open the Knowledge Base →
  • Employees can now be linked to a location and a work area

    Legal entities (People → Legal Entities), locations (People → Locations) and work areas already existed in the data model, showed employee counts and offered a per-location employee list - but there was no way to actually assign an employee at all. In the employee profile, tab "Position", the fields Location and Work area now sit right next to Department and Position - both when creating a new employee and when editing an existing one. The work area only becomes selectable once a location is set, and changing the location resets an already-picked work area - so a work area belonging to a different location can never be saved in the first place. Employees -

    Open the Knowledge Base →
  • Invite to portal, forgot password, and signing out really ends the session

    Until now there was no way to obtain a first password for the employee portal at all, and a forgotten password was a dead end that not even HR could open again. New: on the personnel record, Invite to portal sends an email with a single-use link for setting a first password - and it works without an admin account, so it also covers staff who exist only in the personnel file. The portal sign-in page now offers Forgot your password?; the confirmation always looks the same, so the page cannot be used to find out who works here. And Sign Out now ends the session on the server: previously it only cleared the browser while the sign-in stayed valid for eight hours, so a lost device could not be cut off. Successful and failed sign-in attempts are now recorded in the audit trail as well.

    Open the Knowledge Base →
  • Legal entity employee count is now correct

    On the overview under People → Legal Entities, the Employees column always showed 0 regardless of the actual contract situation - as did a legal entity's employee list (empty) and the delete-guard message, which reported a legal entity with assigned employees as unused. The cause was a stale column that had stopped being written after an earlier change - the actual assignment has since lived exclusively in the employee's current contract. The counter, the list, and the delete guard now read the same current contract as the rest of employee management.

    Open the Knowledge Base →
  • One work queue instead of many lists

    Under "Waiting for me" approvers see every process that needs their decision in one place, with waiting time, a due badge and a direct jump into the process. A counter in the navigation shows how much is open.

    Open the Knowledge Base →
  • Payroll runs from before the gross pay correction can now be recomputed

    Runs completed before the miscalculation was fixed still carried the wrong amounts - paid absence days were compensated twice, unapproved time entries counted, and approved supplements were missing. Nothing could be done about it, because a completed run could not be recomputed. Affected runs are now flagged with a notice in their detail view. There, "Review difference" first shows the previous amount, the new amount and the difference for each payslip without writing anything; only "Apply correction" writes the new amounts. Every changed payslip then stays traceable under "Corrections". Approved supplements are bound to the recomputed run in the process and cannot be paid again in a following month.

    Open the Knowledge Base →
  • Reminders are now visible on the workflow

    Reminder management for a workflow had already been fully built, but was not linked from anywhere reachable in the Admin area - a reminder could previously only be created directly through the API. The workflow's side panel now shows a "Reminders" section below the task list: existing reminders with their status, and a form to add new ones.

    Open the Knowledge Base →
  • The approver of a career progression now comes from the sign-in (#2540)

    When a career progression was recorded under HR › Career paths, the approving person was taken from the caller's request. Any id at all could therefore be recorded as the approver, and the employee record then carried that entry as established fact. The approver is now always the signed-in person. Nothing changes in the form; existing entries are untouched.

    Open the Knowledge Base →
  • The employee portal now has a handbook of its own

    Looking for help inside the employee portal used to lead nowhere - the handbook pages were reachable only from the admin interface, and that requires an access employees do not have. Every portal page now carries a help button in its lower right corner; it leads to the page describing that very screen, and from there to an overview of all the portal's handbook pages. Pages appear in the language selected in the portal. Only the pages written for employees are shown.

    Open the Knowledge Base →
  • The employee record now shows key figures and leads from there into the matching list

    Until now, every question about a person meant leaving the record and finding and filtering the target page yourself - how many vacation days are left, whether requests or expenses are waiting for a decision, when the contract ends, which devices are assigned. The head of the record now carries a row of five key figures; a click opens the respective list, already filtered to this person. On the target page, "Back to «name»" sits at the top, next to a marker that makes the restriction visible and removable with one click. All filters live in the page address - a copied link shows a colleague the same view. Key figures that cannot measure anything deliberately show no zero but say why: "no entitlement maintained", "no current contract", "open-ended". Tiles for areas you may not view are not offered at all.

    Open the Knowledge Base →
  • "My Area" and the employee portal are now clearly separated

    The knowledge base used to call both surfaces the "employee portal" - self-service inside the admin interface ("My Area") and the standalone application for staff. The affected pages are corrected; remaining mentions of the not-yet-publicly-reachable employee portal now carry the note "in preparation".

    Open the Knowledge Base →
  • Adding a contract now sits above the list

    In the employee file under People → Employees, tab Contract, the "Add contract" button sits at the top right - but the form used to open below every existing contract. From two contracts onwards it was therefore off screen: the click looked like it had done nothing, and the way to the form grew with every further contract, precisely for long-serving employees. The form now opens directly under the button and before the list. While it is open, the same button reads "Close" and is therefore the visible way back on narrow screens too, without scrolling down to the "Cancel" at the foot of the form. The open state is also kept in the address bar, so it survives a reload and can be shared. Nothing changes about the order of the contract list - the currently valid contract still comes first.

    Open the Knowledge Base →
  • Adding an entitlement names the reason instead of a server error

    In the Entitlements tab, "Add Entitlement" ended with an "Internal Server Error" message whenever an entitlement already existed for that combination of employee, absence type, and year. SCS now names the reason in plain language and points you at the existing entry to edit. If the input refers to an employee or an absence type that no longer exists, that is named as well instead of surfacing as a server error. An entitlement with 0 total days and a positive carry-over can still be created as before.

    Open the Knowledge Base →
  • Already approved leave requests spanning a substitute working day are now corrected automatically

    Since the substitute-day repair the leave calculation is right - but requests approved before it kept the higher day count, because that count is stored when the request is submitted and never recomputed. Those employees' leave entitlement stayed one day too low per substitute working day, and nobody noticed: the request looked finished. The system now settles this itself. The approved request stays untouched - its day count, its approver and its timestamp are not altered. Instead a separate position labelled System correction appears in the leave account, its reason naming the holiday concerned and the cause; it is additionally recorded in the employee record's audit log. The correction only ever gives back, never at the employee's expense, never twice for the same request, and never in a leave year whose carry-over has already expired under your expiry rule. Nothing is required from you. Adjusting leave entitlement,

    Open the Knowledge Base →
  • An absence is decided by the person responsible, not by anyone holding the permission

    Until now the "Approve absences" permission was enough to decide every request in the company, including one from another department. The four-eyes principle only prevented approving your own request; whose request it was otherwise did not matter. From now on: the HR department ("Manage HR") still decides for all employees - HR is nobody's direct line manager and needs that reach. A role carrying only "Approve absences", by contrast, now decides only for its own people: everyone for whom it is entered in the Position tab as Line manager or as Absence deputy. On somebody else's request the message "This request is not yours to decide" appears. Nothing changes for the four shipped system roles, because they carry both permissions together. This requires the line manager's user account to be linked to their employee record, which happens automatically when they are invited via HR → Employees.

    Open the Knowledge Base →
  • Change-request decision email now names you (#1852)

    The email "Decision on your change request" always started with a fixed "Hallo," with no name at all, even though the recipient (you, as the person who submitted the request) is known at send time. The salutation now uses your first name; if none is on file, a general but complete salutation appears - never an open gap. Existing tenants are covered by a data migration, unless the template was customized.

    Open the Knowledge Base →
  • Clock in directly from the dashboard tile

    On My Area → Dashboard, the "Time Tracking" tile used to show numbers only - today's, this week's, and this month's totals plus the overtime balance. To clock in or out you had to switch to the Time Tracking page. The tile now carries the same button: Clock In while nothing is running, and Clock Out with a running clock and the time left today against your daily target once you are clocked in. Both paths write the same entry - what you punch on the dashboard shows up immediately on the Time Tracking page, and the other way round. If the status cannot be loaded, the tile says so explicitly instead of wrongly claiming "not clocked in".

    Open the Knowledge Base →
  • Contract type in the "Organization" tab now translated correctly

    The contract list in the Organization tab of the employee file used to show the contract type as a raw translation key instead of readable text (e.g. "contractType.freiermitarbeiter"). It now shows the same translated text as the Contract tab.

    Open the Knowledge Base →
  • Downloaded payslips now carry the right name, and the link expires

    under My Payslips (portal and self-service), the downloaded file used to land under a technical name like 3f2a...-payslip-2026-07.pdf - the browser had no display name to work with and fell back to the last segment of the storage path. The file is now named after the payslip itself, for example "Payslip July 2026.pdf". At the same time, the previously permanent, direct storage link was replaced with a signed link that expires after one hour; clicking Download again reliably returns a fresh link. Who is allowed to see which payslip has not changed - the existing ownership check was already in place and stays exactly as it was.

    Open the Knowledge Base →
  • Employee file now always shows the newest contract

    In the employee file under People → Employees, the tabs Compensation, Position, Vacation and Time could display and save values from an older contract instead of the current one - specifically when an employee had two simultaneously active contracts (for example after a contract change where the predecessor contract had not yet been deactivated). Which of the two contracts was shown used to depend on the order the API returned them in, not on the actual contract start date. The four tabs now determine the current contract exactly as unambiguously as the Contract tab does: by start date, with the creation time as a tiebreaker - regardless of the order the contracts are delivered in.

    Open the Knowledge Base →
  • Employee portal access now works right after accepting an invitation

    Anyone who

  • Employment type and contract type now explained

    In the employee list (the "All Types" filter) and in the Contract tab of the employee file, a hint text now clarifies that employment type (the employee's category, e.g. full-time/contractor) and contract type (the legal form of the individual contract, e.g. fixed-term/freelance) are two independent fields - not the same thing under two names.

    Open the Knowledge Base →
  • Expense reports are cent-exact and no longer stop half-way

    under HR → Expenses the total of an expense report used to be added up from the individual amounts before it was saved. With unlucky amounts the result was a cent off from the sum of its line items - a report over 0.10, 0.20 and 0.30 could show 0.60 and still have a different value stored. The total is now summed by the database over the line items themselves, so it is always exactly the sum of what the report contains. The same applies to mileage: distance and rate per kilometre are no longer multiplied approximately but rounded commercially to two decimals - at exactly half a cent it now reliably rounds up instead of occasionally down. In addition, four operations are now all-or-nothing: create report, submit report, approve report and create mileage expense either complete fully or not at all. If the connection drops mid-way, no report is left without its line items, no already-approved expense sits under a report that was never approved, and no mileage expense is left without its trip. The operation reports an error in that case and can simply be repeated. Existing reports are not recalculated - the correction applies to newly created reports and mileage entries.

    Open the Knowledge Base →
  • Fixed: planned-hours periods no longer overlap - and can finally be corrected

    Under People → Time tracking → Timesheet → Planned hours every save used to create an additional period without ending the preceding one. Two different planned values then applied to the same day side by side, and which one ended up in a report was decided by the order of a query instead of by a rule: the same timesheet could show two different planned hours on two visits, and in the team overview the planned hours of the month were counted twice. Because the working-time account, the overtime and the absence calculation all stand on those numbers, this was a silent corruption - with no error message. From now on the periods form a gapless chain: a new period closes the preceding one on the day before, and the same “Valid from” no longer creates a second period but corrects the existing one. The “Valid until” field is new; it normally stays empty, in which case the period runs until the next one begins. If you do enter an end that reaches into a later period, saving is refused - stating from when the period it collides with begins; what you entered is never silently shortened. The “Maintained periods” list now offers “Edit” and “Delete”: until now a typo could only be buried under another period, never corrected. On deletion the preceding period takes over the end date of the removed one so that no gap appears. Existing overlapping periods are cleaned up automatically during the update - per employee the most recently saved state wins where the start date is the same, and every period ends at the latest on the day before the next one.

    Open the Knowledge Base →
  • HR home page now shows real metrics

    On the HR home page (People → Overview, /hr), the Absence rate, Present now, and Positions tiles were structurally stuck at 0 regardless of the actual data - they read fields the called endpoints never returned. Every tile is now wired to a real data source, two new tiles (Inactive employees, Open job openings) have been added, and the Absence rate and Turnover tile captions now name the period the underlying query actually uses (year and 12 months, respectively). If a tile occasionally cannot load its data, it now shows its own error hint instead of a misleading 0.

    Open the Knowledge Base →
  • Invalid date entries in the personnel area now report a clear error

    In numerous places in the personnel area - such as contracts, absences, expenses, holidays, time tracking, compensation, succession planning and more - an incorrectly entered date (e.g. text instead of a date, or a calendar date that does not exist, like February 30) used to result in a generic server error. Date fields are now checked before saving for a valid format AND a real calendar date; an incorrect entry now returns an understandable error message naming the affected field instead.

    Open the Knowledge Base →
  • New dashboard tile "Today at the company"

    The employee portal dashboard now shows at a glance who is absent today and who has a birthday - company-wide, not just for supervisors. For a foreign person, only the state "absent" appears, never the absence type - a sick note is indistinguishable from a vacation day here. A birthday shows only the day and month, never the birth year. Whether the tile shows birthdays at all is a company-wide setting under HR → Portal Birthdays (requires "hr:manage" permission, default: enabled) - the absence display is unaffected either way.

    Open the Knowledge Base →
  • New knowledge base pages for the employee portal

    Six new pages describe the standalone staff application: home, sign-in, absences, time tracking, documents and my profile. The employee portal itself is not publicly reachable yet; the pages are marked accordingly.

    Open the Knowledge Base →
  • New: fill a timesheet automatically, and approve a period

    Under People → Time tracking → Timesheet there are two new buttons. “Fill automatically” writes the maintained planned hours onto every working day of the chosen month that has nothing recorded yet - the thing nobody confirms daily in practice, which is why the record stayed empty and the monthly balance reported the full planned time as missing. Because a timesheet is a legal record, it explicitly does not come into existence by itself: the fill never runs in the background, only when you trigger it and confirm the question. Who triggered it, when, and for which period is in the audit trail. Days that are already recorded stay untouched, days in the future are skipped, and filled days carry the permanent note “auto-filled” in the new “Origin” column - with an icon and words, not by colour alone, and in the “Remark” column of the printed timesheet as well. That keeps it distinguishable later on what somebody confirmed and what was a default. A filled day nominally starts at 09:00 and contains the statutory rest break. “Approve period” gives a month a state for the first time: above the day list it now says Open, Pending or Approved - until now a finished month looked exactly like a running one. As long as nobody has decided anything the state is derived from the calendar; opening the timesheet changes nothing about it and creates no data. After approval the time entries of that month are locked against creation, change and deletion; the card names who approved it and when. To correct something, lift the approval again via “Lift approval” - the original approval stays in the audit trail. Filling needs the “Write time tracking” permission, approving and lifting the new “Approve time tracking” permission.

    Open the Knowledge Base →
  • New: the timesheet checks the statutory working time limits

    Under HR → Time tracking → Timesheet there is now a "Statutory limit" column next to "Deviation". Until now the timesheet compared a day with the planned hours and nothing else - somebody who worked 10 hours with 10 hours planned stood out nowhere, although the German working time act draws a line right there. Planned hours and the law are two different yardsticks, which is why they now sit side by side as two separate statements. Every day row is measured against three limits: the maximum working time (section 3 ArbZG - at most 8 hours per working day, 10 as long as the average stays at 8), the rest break (section 4 ArbZG - at least 30 minutes above 6 hours of work, at least 45 above 9) and the rest period between two working days (section 5 ArbZG - at least 11 hours). Every finding names the measured value and the limit in plain words, with an icon and text rather than by colour alone, so that it survives a black-and-white printout; the number of affected days of the month is stated above the list. The timesheet blocks nothing and rejects no entry - it states what the law says about this month, the judgement stays with you. Two boundaries of the check are worth knowing: the average is taken over the working days of the displayed month (the statutory compensation window reaches up to 24 weeks, further than a monthly sheet can compute), and the rest period on the first of the month stays unchecked because the previous day lives on a different sheet.

    Open the Knowledge Base →
  • New: working time limits are maintainable

    Under HR → Working time limits you now decide yourself which statutory limits the timesheet measures every day against. Until now the same compiled-in set applied to every tenant - the German working time act for adults. That set stays the default: anybody who never opens the page notices no difference. Anybody who does open it may tighten any limit, but not loosen it. A works agreement with a seven-hour daily cap can be entered; a daily maximum of twelve hours is rejected on save, and the message names the affected limit together with the submitted and the permitted value. The same holds for the break table, including the case where a tier was not shortened but deleted entirely - the check compares the whole table against the law point by point rather than row against row. Alongside the working time act, the act on the protection of young people at work is available as a prepared template (eight hours with no averaging extension, a 30-minute break above four and a half hours and 60 above six, twelve hours of rest). Every value is shown with its unit and its reference period - "8" and "160" are not one value written two ways but a daily and a monthly figure, and in the break table the left column carries hours while the right one carries minutes. Only holders of the "hr:manage" permission may change the values; every save, every adopted template and every reset creates an entry in the audit trail.

    Open the Knowledge Base →
  • Overdue absence requests become visible - and remind by themselves

    A request could sit undecided indefinitely with nothing pointing at it: no error, no number, just an employee waiting for an answer. Under People → Absences the top of the page now carries the "Overdue requests" metric - still open although the period is already over - and in the "Requests" tab "Overdue only" filters for exactly those (the choice is kept in the address bar and can be linked). When the period of an undecided request is about to start, the direct supervisor additionally receives a reminder in their worklist; it disappears as soon as anybody decides the request. The lead time is set in the "Policies" tab under "Decision deadline" (default: 3 days). An elapsed request is still not rejected automatically - that would be a decision without a decider.

    Open the Knowledge Base →
  • Payroll: a stuck run can now be reset

    If a payroll run stayed permanently in "Processing" after a technical interruption of the calculation (e.g. a restart, a timeout), there was previously no action for it in the interface - the run was unreachable without a direct database intervention, neither recomputable nor cancellable. The run's detail view now offers a "Reset" action: it brings a stuck run back to "Draft" so it can be recomputed. If the calculation is actually still running, the system rejects the action instead of interrupting the ongoing computation. In addition, a run in "Processing" status can now also be cancelled directly. Both actions require the "Edit Payroll" permission and are recorded in the audit log.

    Open the Knowledge Base →
  • Payroll: payslips can now be published to the employee portal

    For a completed payroll run, HR → Payroll now offers a "Publish to Portal" action - it makes every payslip in that run visible at once in the portal of the employee it belongs to, and sends each employee a notification. The payslip list has a new "Portal" column showing whether an individual payslip is "Visible" or "Hidden"; the eye icon toggles visibility for a single payslip, independently of the others in the same run. Both actions require the "Edit payroll" permission, and a run that is not yet completed cannot be published.

    Open the Knowledge Base →
  • Team calendar no longer shifts the page on phones

    Under People → Calendar, "Team" tab, the page could shift horizontally on narrow screens (e.g. 390 pixels wide) instead of staying put - a long employee name or a long label in the "Calendar layers" side panel broke through its fixed width instead of being cut off. Visible content ended up off-screen without any scrollbar showing it. The side panel now always keeps its width - an overly long name is now shortened with an ellipsis. The calendar grid itself was not affected: it already scrolled sideways within its own frame before this fix.

    Open the Knowledge Base →
  • Terminating now stops when the offboarding plan can't be saved

    In the "Terminate employee" dialog of the employee record, the termination used to go through even when saving the offboarding plan failed - you only got an error message as a hint. The employee was then marked as terminated with no access-end date recorded anywhere. A failed save now blocks the termination: the dialog stays open, the values you entered are kept, and you can try again right away. Only once the plan - including the date access ends - has been saved successfully does the termination go through. Nothing else changes in how you use the dialog.

    Open the Knowledge Base →
  • The hiring event now carries department and manager

    Onboarding automations and webhook subscribers reacting to the internal "employee hired" event now reliably receive the department id, the manager id, and the first and last name of the new person. On this delivery path these fields used to stay empty every time, without any error ever showing up. The termination event now delivers first and last name just as reliably.

    Open the Knowledge Base →
  • The last sign-in in "My Profile" now names the address and explains itself (#2390)

    The field under Settings → My Profile used to show nothing but a timestamp - and that timestamp was routinely weeks older than the session you were sitting in. It looked like a defect, but it was not one: what counts is a real sign-in, and staying signed in is not one; the console extends your session in the background. The field simply never said so, which left the only means you have of noticing a sign-in that was not yours without any value. It is now called Last successful sign-in, additionally names the address the sign-in came from, and says in one line underneath what the value means and what to do if you do not recognise it. Accounts that have never been used say so explicitly instead of implying a date.

    Open the Knowledge Base →
  • The research allowance record can now be exported

    the timesheet was only available per employee and per month - but a research allowance application (FZulG) needs the hours of several employees over a freely chosen period, tied to subsidised projects. Projects can now be marked as a subsidised research project and carry a project reference. The new "R&D Allowance" tab in project time tracking exports the total hours per employee for the period, as CSV or as a print view, each carrying period, generation time and data source. If the selected period holds no hours, no file is produced on purpose - you get a hint instead. The export requires the "HR read" permission and is recorded in the audit trail.

    Open the Knowledge Base →
  • Time-tracking changes now appear in the Audit Trail

    Under People → Audit Trail, working times showed nothing at all until now - there was no way to establish afterwards who corrected a time entry, approved a booking, or reopened a month that had already been signed off. Every time-tracking operation now leaves an entry: clock-in and clock-out, creating, changing and deleting a time entry, single and bulk approvals, auto-filling a month, and approving or reopening a timesheet. Recorded are the operation, the employee concerned and the person who acted - deliberately without names, salary figures or e-mail addresses. The remaining HR areas will follow step by step.

    Open the Knowledge Base →
  • Workflow reminders are now actually delivered

    A reminder created for a workflow step used to be saved and nothing more - there was no background run that ever noticed a due reminder and sent it, no matter how long the due date had passed. Due reminders (due date reached, not yet sent) are now checked automatically in the background and delivered through the notification bell to everyone holding the "Manage HR" permission. A reminder that was already delivered is not sent twice.

    Open the Knowledge Base →
  • "Add adjustment" no longer leads into a dead end

    In the employee file under People → Employees, tab "Vacation", section Entitlement adjustments, the Add adjustment button disappeared as soon as you clicked it - and when no leave entitlement had been recorded for the selected year, all that appeared in its place was a terse note: no form, no cancel button, no way back. The section was unusable until the employee file was reopened. From the operator's point of view, nothing happened at all. It hit precisely the normal situation at the turn of the year: a new year has no entitlement recorded at first - and that is exactly when last year's remaining days get carried over. The button now always stays in place and reads Close while the section is open. If no entitlement has been recorded for the year, the section now explains that in full sentences and offers the next step right away: Create the entitlement for this year takes you straight to HR → Absences → Entitlements, already set to the selected year. Also fixed: while the entitlements were still loading, the section claimed that no absence type existed - a false statement for every employee who does have one. Loading and emptiness are now distinguishable. Whether the section is open is also reflected in the address bar: a shared link opens it the same way, and the browser's back button closes it. The adjustment itself is unchanged - fields, permissions and the audit trail stay as they were.

    Open the Knowledge Base →
  • "Redeliver" in the delivery log now asks first - and names the target address

    Redelivering from a webhook's delivery log used to fire on the first click. It is not a local retry: the payload goes to the address you configured, carrying a valid signature, and is indistinguishable there from the original delivery - depending on the receiving system it can trigger an order, re-open a case, or create a record twice. Nothing on this screen can recall it. A confirmation now appears before it is sent, naming the event and the target address the signed delivery goes to. Only confirming sends it; cancelling sends nothing. The delivery itself, the retries and the log are unchanged.

  • A request that was never decided is recognisable as such

    A request whose period has elapsed while it still awaits a decision appeared in the "Past absences" list with the same "Pending" marker as a fresh one. It now reads "Pending (overdue)" there - visible instead of lost in the past.

    Open the Knowledge Base →
  • A submitted request also becomes a real task

    besides the bell entry, the direct supervisor now receives the request as a task under Tasks → My Tasks - with the period, a link to the decision, and a due date three days after submission. The task closes itself as soon as the request is approved, rejected or cancelled, including when somebody else decided it. It never has to be ticked off - and it can never sit there open long after the matter was settled. If the responsible person is not linked to an employee record, no ownerless task is created: the system reports a defect instead, and the bell entry is unaffected.

    Open the Knowledge Base →
  • A submitted request is also delivered by email

    the supervisor now receives the request not only in the bell and as a task but by email as well. Anyone who does not want that can switch it off per process kind under Settings → Process notifications - the worklist entry always remains; only the email can be unsubscribed.

    Open the Knowledge Base →
  • An absence request now goes to the direct supervisor - no longer to everybody

    until now every holder of the "Manage HR" permission received every submitted request in their bell. With five holders, five people saw the same request and nobody owned it - what is on everybody's list is on nobody's list. From now on a request reaches exactly one person: the requester's direct supervisor, as recorded in the personnel record under Organisation. The entry additionally shows how long the request has been waiting, a deadline marker ("on track", "due soon", "overdue") and the action "Review request", which takes you straight to the decision. Who may see a request does not change - the Requests tab still shows every request to everybody with the permission; only whose worklist it lands on changes. If no supervisor is recorded, or they have no active account, the request is NOT sent to everybody as a fallback - the system reports a defect to the operator instead, so the personnel record gets completed. In that case, record a supervisor under HR → Employees → Organisation.

    Open the Knowledge Base →
  • An approved request now changes hands instead of ending in the archive

    until now a request vanished from every worklist the moment the supervisor decided it, and whether HR heard about it depended on somebody remembering. From now on the approval raises a follow-up process for the employee's HR owner: “Absence of … is approved”, with the period, a link to the request and the action “Process approval” - in the bell, optionally as a task, and by email. If a tenant has several HR owners, each of them gets their own entry - that is the normal case in larger organisations, not a fault. A rejection or a cancellation raises no follow-up, because there is nothing to process. The follow-up is ticked off by the HR owner; if the request is cancelled later, it disappears on its own. The chain is limited to two steps and cannot run in circles - that is fixed in the system and checked at startup, not left to the individual case. If no HR owner can be found, the process is NOT sent to everybody as a fallback; the system reports a defect to the operator, and the approval itself is never affected.

    Open the Knowledge Base →
  • An offboarding with a successor can be saved again

    In the "Terminate employee" dialog of the employee record, saving failed with "Internal Server Error" and "Offboarding plan could not be saved" as soon as at least one person was named as successor - that is, exactly when reports, absence approvals or the department lead were to be handed over. Without a successor, saving went through, which made the fault hard to pin down. The cause was a malformed database query used to check whether the selected successors exist at all. This mattered for security: because the plan was not saved, the date on which access ends was not recorded either - the terminated employee kept their access. Notice date, access end date, termination reason and all six successor categories are stored again and appear in the employee record afterwards. Nothing changes in how you use the dialog.

    Open the Knowledge Base →
  • Closing a whistleblower case now asks first - the closure is final

    Under HR → Whistleblowing, the button in the resolution panel closed the case on the first click. The system does not accept a second attempt: once a case is recorded as "Resolved" or "Dismissed", any further change is refused. A misclick therefore fixed the outcome and the resolution notes for good - in the one procedure where the reporting person has no second channel to object. The button is now called "Close the case for good" and asks first; the question names the case number and states that this cannot be taken back. Only the confirmation triggers it. Status and severity in the same panel are reversible and deliberately still do not ask.

    Open the Knowledge Base →
  • Compensation can now be recorded retroactively

    in the employee record under HR → Employees, "Compensation" tab, a compensation with an effective date in the past could not be entered - the input was rejected with the note that the effective date must not precede the start of the current compensation. For people hired before the switch to this system, the history therefore began arbitrarily on the day the record was migrated, which made it worthless for questions from payroll, an audit or an employment tribunal. Above the "Compensation history" list there is now "Add past period": you record a closed period with start, end, amount, commission and a mandatory reason. The end date is pre-filled with the day before the oldest existing entry starts, so the periods abut without leaving a hole. Already-closed rows can additionally be edited and removed. Periods may never overlap; gaps are allowed where an intermediate period is unknown. The running compensation ("until today") stays with the contract path as before and is deliberately locked here. All of it requires the "manage HR" permission and is fully audited - account, time, employee and period are recorded, never the amount itself. Payroll is unaffected: a completed payroll run keeps its own snapshot and is not changed by a backfilled history.

    Open the Knowledge Base →
  • Entitlement adjustments over several days - and last year's carry-over can finally be recorded

    In the employee file under People → Employees, tab "Vacation", the Entitlement adjustments area only allowed "full day" or "half day" per position. Anyone wanting to carry over five remaining days from last year would have had to create five separate adjustments - and because nobody did that in practice, affected employees ended up with a negative leave entitlement in the allowance tile, even though they were legally entitled to the days. Instead of the "Amount" dropdown there is now a Number of days field: you enter how many days to adjust - whole or half, for example 5 or 2.5, up to 365 per position. Half days therefore remain possible; only the one-day limit is gone. Second, a new Type of adjustment dropdown offers "Carried over from last year": booked that way, the carry-over appears in the allowance tile as its own, named position plus a subtotal row "Carried over from last year" below the base entitlement - separate from the current year's entitlement instead of vanishing into it as an anonymous credit. The history now states when, how much and by whom for every position; the name of the person who created it was never shown before. Also fixed: a deduction was rejected when the cover came wholly or partly from the carry-over, even though the allowance tile showed those days as available - the check and the display now use the same basis. Unchanged: every adjustment remains an immutable position - a correction of a correction is a new position, nothing is overwritten. Existing adjustments are untouched and continue to count as manual adjustments. Only people with the Manage HR permission may create one, and every adjustment is recorded in the audit trail. Adjust leave entitlement manually,

    Open the Knowledge Base →
  • New in the employee portal: inbox and team status for supervisors

    The portal dashboard (My area → Dashboard) only ever showed your own view - leave balance, time tracking, upcoming events. Anyone who leads a team learned nothing there about an absence request waiting for a decision; those requests lived exclusively in HR administration, which many line managers cannot reach. Two new cards close that gap. The inbox lists every open absence request of your employees with name, type, period, days and reason - and you decide right there, with Approve or Reject, without leaving the page. The inbox is deliberately a worklist and not a history: an entry disappears as soon as the request has been decided - including when somebody else decided it, for example your deputy or HR. The number next to the heading therefore always means "this much is waiting for me", never "this much has happened". The team status shows, for a day you pick, who is clocked in, who is clocked out, who is missing a clock-in and who is not in the office, each with a count and the people; clicking a state filters the list, and both the day and the filter live in the address bar, so the link can be shared. On data protection: you only ever see your own team. Who reports to whom is decided by the employee record (field "Manager"), and the limit is enforced on the server rather than hidden in the display - a call without leadership responsibility is refused and returns no personal data at all. If you are only recorded as an absence deputy, you see the affected requests in the inbox (marked "You are deciding as deputy") but not the team status - attendance times go further than a single leave approval. Anyone who leads nobody does not see either card; the personal dashboard is unchanged. The four-eyes principle still applies: you cannot decide on your own request here. Inbox and team status (supervisors),

    Open the Knowledge Base →
  • New: the timesheet as an on-screen view, with planned hours per weekday

    Under People → Time tracking there is a new “Timesheet” tab. It shows the proof of working hours for one employee and one month, day by day: in, out, break, hours worked and planned, and the balance per day. Above it sit the hours account across all periods, stating whether it is in credit or in deficit, the balance of the period, and the number of days that deviate. Until now the timesheet could only be opened as a finished print page in a new window, where there was no way to tell which days departed from the plan. Deviating days are now highlighted - with an icon and the words “worked more than planned” or “worked less than planned”, not by colour alone, so the marking survives a black-and-white printout. A working day with no entry at all deliberately counts as a deviation. What is also new is that the planned hours can be maintained at all: under “Planned hours” you enter the hours per weekday, valid from a date; a later change opens a new period and leaves the past untouched. Without a maintained period the timesheet assumes, as before, 8 hours from Monday to Friday, and states this above the list instead of passing the assumption off as a maintained value. Employee, year and month are kept in the address bar, so the link always returns to the same timesheet. Other people’s working hours stay hidden: without the “Read HR” or “Read time tracking” permission the request is refused, and opening the view does not alter the record. The familiar print page is unchanged.

    Open the Knowledge Base →
  • Remote work: record the agreement, count the days, report to the tax office

    People › Remote work is a new page. Until now none of this existed in the system: the employee record does hold a field for a person's permanent place of work ("Berlin office"), but nothing anywhere stated on which days somebody actually worked from home - not in time tracking, not in the time tracker, not in project time. Neither a count nor any evidence was possible. The page has three tabs. Under Agreement you record how many remote days are agreed with a person - per week, per month or per year - valid from a date and optionally limited. A later change does not rewrite the past: an evaluation of a previous year keeps using the agreement that was in force back then. Under Days you record one of three work locations per working day - home, office or other location - and above the list the counted days and the agreement, projected onto the month, sit side by side; a deviation is marked with a symbol and a word ("▲ above the agreement", "▼ below the agreement"). If no agreement is stored for a person, it reads "Not on record" rather than zero - the two are not the same statement. Under Report you see the yearly statement for everyone and export it via Export as CSV as a table a tax advisor can check. The count is country-neutral: it counts days, it does not compute tax consequences. The remote-work allowance is German tax law, but the company also employs people in other countries; the report therefore states the number of days and the person's country, and the evaluation remains the tax advisor's job. Because the report goes to an authority, every change stays traceable: creating, changing and removing a day are kept with time, author and old and new value, and that record survives even when the day itself is removed again. You find it on the Days tab under Change history. On permissions: everyone sees their own figures in the employee portal; other people's figures require read HR, recording requires manage HR. A call without the required permission is refused on the server and carries no figures with it. Working hours stay where they are - how long someone worked remains in time tracking; the new page only says where. Remote work,

    Open the Knowledge Base →
  • Settled requests disappear from the bell

    once a request is approved, rejected or cancelled, its entry is gone from the worklist - including when somebody else decided it. Until now it stayed there until someone marked it read by hand, long after the decision had been made.

    Open the Knowledge Base →
  • Substitute holidays now apply to employees with an assigned holiday calendar too

    In countries with a statutory weekend transfer (Ukraine, Japan, United Kingdom, South Korea) a holiday falling on a Saturday or Sunday moves to the next working day - that substitute day is the day off. For employees with an assigned holiday calendar that transfer never reached the leave calculation: it used the statutory holiday date, the Saturday or Sunday nobody works anyway. The substitute Monday counted as an ordinary working day and was deducted from the leave entitlement - at the employee's expense. The holiday list in the employee file and the team calendar showed the substitute day correctly all along; only the deduction disagreed. For Ukraine in 2026 this affected three days: Mon 09.03. (Women's Day), Mon 11.05. (Day of Victory over Nazism) and Mon 29.06. (Constitution Day). From now on both cases calculate alike: an employee with an assigned calendar consumes exactly as many vacation days for the same period as one without. Carried along as well: holidays suspended by law ("(призупинено)") now count as working days with an assigned calendar too and are deducted from the leave entitlement. Important for requests already approved: the change applies to new calculations. A request approved before the switch that spans one of those substitute Mondays keeps the day count stored back then - correct it if needed via Adjusting leave entitlement. Calendar & holidays,

    Open the Knowledge Base →
  • Suspended Ukrainian holidays cost a leave day again

    The Orthodox holidays Easter and Trinity are suspended by law in Ukraine for 2026 - they are meant to stay visible but must not count as days off. In the leave calculation the suspension did not take effect: in 2026 both days fall on a Sunday (12.04. and 31.05.), the Ukrainian weekend transfer moved them to the following Monday (13.04. and 01.06.) and occupied that Monday as a day off. A leave request spanning one of those Mondays therefore consumed no vacation day although it should have. The cause: the suspension was maintained at the substitute date while the check ran against the statutory holiday date, so the two never met. From now on the suspension applies at the statutory holiday date: no substitute Monday is created any more, Mon 13.04.2026 and Mon 01.06.2026 are ordinary working days and are deducted from the leave entitlement. In the holiday list of the employee file and in the team calendar the "Suspended" label now appears on the Sunday (12.04. and 31.05.) instead of the Monday. Valid holidays are unaffected: a Ukrainian holiday that is not suspended is still moved to the next working day and stays free (example: Constitution Day Sun 28.06.2026 to Mon 29.06.2026). Past years do not change either: no suspension is on file for 2023 to 2025, and the calculation returns unchanged values there. If one of those two Mondays should still be a day off at your company, add it manually via Add holiday - a manual entry always wins. Calendar & holidays,

    Open the Knowledge Base →
  • The "Planned" metric now says what it counts

    It read 0 even though several requests were listed below it - because it counted only approved future days, not the requested ones. The number was right; the label lied. The metric is now called "Approved and planned", and whenever undecided requests are still open a "+ N requested" line appears underneath it. Number and list can no longer contradict each other.

    Open the Knowledge Base →
  • The absence overview's legend and calendar match again - and are readable without colour

    In the year view (employee file, "Vacation" tab, and in self-service under My absences) the legend showed a different colour from the calendar below it: it named the colour of the first absence type while the calendar drew the colour of the type actually booked. Anyone maintaining two types - vacation in green and sick leave in yellow, say - could not find the legend's colour in the calendar. Legend and calendar now read from one single source; a state can no longer look different in the two places. On top of that, no state rests on colour alone any more: hatching always means "not a working day under the contract", a border in the type's colour always means "something is booked or requested here". All six states therefore have their own pattern, recognisable in greyscale too. Each day's tooltip also names the state in words, in the same wording as the legend (for example "Vacation - Requested"); screen readers announce the same text.

    Open the Knowledge Base →
  • The employee column in the shift planner now stays put on a phone

    Under People → Shift planning the plan can be swiped sideways on a narrow screen, because a week of seven days - and a month of up to 31 - does not fit the width of a phone. The left-hand column with the names is meant to stay in place so it is clear whom a shift belongs to. Instead it travelled out of view with everything else: anyone swiping to the end of the week saw a row of shifts with no name beside it and had to swipe back to get their bearings. Name and department now stay at the left edge in both the week and the month plan while the day columns scroll past - the header cell and the cells below it together. Nothing else about the operation changes, and on wide screens the plan looks exactly as before.

    Open the Knowledge Base →
  • The employee list is now sorted alphabetically - and remembers your choice

    The overview under HR › Employees used to order employees by hire date - unusable for finding a specific person. A new toggle next to the filters now sorts the list by last name (default) or first name, ascending or descending. Your choice is saved and applied automatically the next time you open the page - even after signing out and back in. A shared link with an explicit sort still shows exactly that sort, without changing the recipient's saved preference. Names with accents or umlauts (e.g. "Sánchez", "Müller") now sort into their linguistically correct place instead of landing after every unaccented name.

    Open the Knowledge Base →
  • "Send invitation by email" works again - and names the reason when something blocks it

    The button in the employee record used to fail every single time, in every workspace. A newly created employee could not get access at all, because this is the only route to it. The cause was a piece of information the system needs when issuing the invitation secret, but which had never been created in the data store; this change adds it. That information is what separates an invitation from a password reset link - keeping the two apart matters: a reset link must never pass as account setup. On top of that, the interface now shows the reason when an invitation cannot go out: if the workspace's admin URL or the employee's email address is missing, the notice says so and how to fix it, instead of just "an error" as before. When no reason can be named, the notice gives an identifier you can quote when reporting it. Invitations already sent stay valid.

    Open the Knowledge Base →
  • A contract created on the same day now reliably sorts to the top

    In the "Contract" tab of an employee record, contracts are sorted by start date, newest first and labeled "Current". If a newly created contract shared its start date with an existing one - for example, both starting "today" - the order between the two was not determined: the just-created contract could end up below the older one, making the creation look as if it had gone nowhere. When start dates tie, the creation time now breaks the tie - the most recently created contract sorts to the top.

    Open the Knowledge Base →
  • Create and strike holidays per employee

    In the employee record under HR › Employees, "Leave" tab, section Holidays, you could only assign holidays that already existed in the country's holiday list. If a day was missing there entirely, it was unreachable from the employee record - exactly what happened with four Ukrainian substitute Mondays in 2026 (9 Mar, 13 Apr, 1 Jun, 29 Jun). Create a holiday now lets you enter a day directly with a date and a label, optionally as a half day. The day applies to this person only, appears in their holiday list, and counts in the leave calculation like any other holiday: a leave request covering it consumes no leave day (half a day when marked as a half day). Label and half-day flag can be changed later via the pencil icon; the bin icon takes the day back. Secondly, striking a holiday used to require an assigned holiday calendar - without one, the "count as working day" button was missing on every single day even though the list was populated. It is now available on every day, with or without a calendar. That also makes it possible to remove a holiday that the calendar lists but that does not apply to this person - a day suspended by law, for instance. All of it requires the "Manage HR" permission and is fully audited. Employees,

    Open the Knowledge Base →
  • Deleting a shared calendar now asks first

    Under HR › Shared calendars, the "Delete" button at the bottom of the detail view fired on the very first click. Deleting the calendar takes its member list and its appointment links with it, and nobody can bring those back - not the operator either. A confirmation window now appears first, naming the calendar and saying what goes with it. "Cancel" leaves everything as it is. Creating and editing are unchanged - both still work without an extra question.

    Open the Knowledge Base →
  • Legal entity on the contract - and safer maintenance of companies

    Until now a contract did not say which company a person works for. Whether somebody is employed by SELLERLOGIC GmbH or works for it as a freelancer could not be derived from employment type and contract type - those answer two different questions (how much somebody works, and under which legal form), not the question of which company. The employee file under HR → Employees, "Contract" tab, now has a Legal entity field for exactly that. It is available when creating and when editing a contract and lists every active company from HR → Legal entities. Existing contracts start out unassigned and show "Not assigned" until you set them. Because the field sits on the contract rather than on the employee, it stays traceable which company an earlier contract was signed with even after somebody moves. In the employee list the legal entity of the current contract now appears in the "Employment" column below status and employment type. Second, maintaining the companies themselves has become safer. The bin icon used to appear on every row but did not actually delete anything: the company was merely deactivated and stayed in the list unchanged. Now, if nothing references a company, deleting removes it permanently. If a contract, employee, location or cost center points at it, deletion is refused and the reason is stated - contracts are subject to statutory retention periods, and a deleted company would rob the retained contract of the information about who it was signed with. For that case there is Deactivate: the company is no longer selectable for new contracts, every existing entry stays unchanged and readable, and the step can be undone at any time. The list gains a Contracts column, a Status column and a status filter (all / active / deactivated). Maintaining all of this still requires the corresponding permission, and every change is logged. Legal entities,

    Open the Knowledge Base →
  • The employee portal is usable on a phone again without the page sliding sideways

    On a phone-sized screen (390 pixels wide) the portal was skewed on four pages: Payslips, Documents, Absences and Time tracking were wider than the screen, so the whole page could be pushed to the right - header and menu button included. Swiping right to see a table column pushed the navigation out of view, and you had to swipe back before you could use it. Measured, the payslips page was 903 pixels wide instead of 390, documents 800, absences 687 and time tracking 638. All four now sit exactly within the screen width. Wide tables are not cut off - they scroll horizontally inside their own box, so you still swipe across to the right-hand columns while the page around them stays put. The other four portal pages (Dashboard, My Profile, Shifts, Performance) were already fine and have stayed that way.

    Open the Knowledge Base →
  • The invitation link for new employees no longer carries its secret visibly in the address

    When you invite somebody to sign in, the email contains a link the invited person uses to set their password and activate their account. That link is worth as much as a password - whoever holds it sets up an administration account with it. Until now the secret sat in the query part of the address (behind the question mark), which meant it was written down in places nobody treats as a secret store: the access logs of the servers along the way, the browser history and the session restore on the invited person's device. It now sits behind a hash sign - a part of an address that browsers never send to a server at all, so it cannot end up in any log. On top of that, the secret disappears from the address bar once the page has loaded: copying the address or sharing the screen no longer passes it on. Nothing changes in how you work - you still invite via "Invite to sign in". Invitations already sent stay valid and keep working unchanged until their seven days are up; nobody has to be invited again.

    Open the Knowledge Base →
  • The team calendar now sets weekends and public holidays apart

    In the Team tab under HR → Calendar & Holidays, a Saturday looked like a Tuesday, and a public holiday was only recognisable if an entry happened to fall on it. In the month and week views, every weekend now carries a slightly offset background colour and every public holiday a distinct one of its own. Which holidays show depends on the people currently in view: filter the sidebar down to one colleague and you see exactly their holidays - if they live in another country, you see that country's holidays, not yours. With the whole team shown, a day is marked as soon as it is a day off for at least one visible person; the day's hint names who that is, and screen readers read it out too - colour is never the only carrier of the message. Who is entitled to which holiday is decided by the same chain that vacation accounting and absence planning use (approved residence before assigned holiday calendar before the person's country), not by a second rule inside the calendar. Weekend, holiday, and absence stay three different things: the first two tint the day, an absence remains an entry inside the day.

    Open the Knowledge Base →
  • The employee portal now asks before irreversible steps

    Two buttons in the employee portal used to fire on the very first click - "Cancel" in the list of your absence requests and "Acknowledge review" under "Performance". Neither can be undone: a withdrawn request goes to HR and retracts the entry in the shared calendar, and an acknowledgement is visible to your manager at once. A misclick could not be caught. Both buttons now open a confirmation window first, one that names the consequence - with the date range of the request concerned, or the name of the review cycle - and only acts on the second click. Choose "Cancel" and nothing has happened. The same question now also stands in the HR area of the admin before "Acknowledge" on a submitted review (People › Performance) - acknowledging is the other side of the same act, it can be taken back just as little, and the window names the person concerned. Plain saving is unchanged: submitting a new absence request or sending your self-assessment still goes straight through, with no extra question. My Absences,

    Open the Knowledge Base →
  • Dates in the HR area no longer convert to world time

    a date the system fills in itself - the hire date of a newly created or invited employee, the effective date of a termination, a probation or status change, the effective date of a compensation adjustment, the reference day of a backdated absence, the report date of the pay-gap report, the day printed into a generated personnel document, and the bounds of the HR reports - used to be cut out of world time (UTC). Between midnight and 02:00 German time that was the previous day. Creating an employee at 00:30 produced a hire date of yesterday, which carries into the end of probation, length of service and the pro-rata holiday calculation; the 30-day reports ended on the previous day, so the current day appeared in no figure at all. All of these now come from the tenant's time zone (Settings > Time zone). Nothing is rewritten retroactively - dates already stored stay as they are.

    Open the Knowledge Base →
  • Employee portal: dates follow the portal language, and the day is right again

    Under Absences and My profile in the employee portal, dates were always shown in the German format - including for everyone who had switched the portal to English, so an English caption sat next to a German date. Dates now follow the portal language. A second defect at the same places was fixed along with it: the hire date and the start and end of an absence are plain calendar days without a time, but they were read as midnight UTC and rendered in the viewer's own time zone. Anyone west of Greenwich therefore saw the previous day. The day now shown is the one held in the record. For the time a request was created the viewer's own zone deliberately still applies, because that names a moment rather than a calendar day.

  • Field captions in HR are now linked to their field

    Across the HR pages - absences, time and project tracking, payroll, compensation, recruitment, performance reviews, training, locations and legal entities, cost centres, shift planning, calendars, document templates and surveys - the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name. 264 fields now carry that link. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. Fifteen places sound different: where the heading sits above a read-only value only - such as the requested field name and current value of a change request in the employee portal, or the colour preview of a shift template - it is now read out as ordinary text instead of as the caption of a field that does not exist. Where what follows is a group of several buttons - such as the colour pickers for teams, calendars and absence types, the weekday picker in the working-time model, the star rating in recruitment, or a webhook's event selection - a screen reader now announces a group with that name. Two choice fields were also wired to the wrong element: for the region and currency pickers the link landed on the surrounding frame instead of the search field; it now sits on the field itself.

    Open the Knowledge Base →
  • Inviting an employee: right after creating them, and without a detour through a setting

    Two things stood in the way. First, creating an employee ended in a notice only - the invitation then had to be started separately from the employee overview, and nothing said that this second step existed. The invite dialog now opens directly after creation, with the role selection as before. Second, in newly set up workspaces the invitation aborted with "Admin URL not configured" and pointed at a setting nobody had been shown. That address belongs to your workspace anyway and is now used automatically when you have not stored one of your own; an address you entered yourself still takes precedence. You do not need to do anything. If no address can be determined at all, the message now says what it is needed for and where to enter it (Settings → Domains & URLs).

    Open the Knowledge Base →
  • The captions under "My Profile" are now linked to their control

    On the account page My Profile (Settings › Profile) the controls carried a caption above them that was not technically linked to them. Clicking the caption therefore did not put the cursor in the field, and a screen reader announced the field without a name. Four captions now carry that link. Nothing changes visually. Three places sound different: date format, time format and start of week each sit above a group of several choice buttons rather than above a single input field; a screen reader now announces a group with that name.

    Open the Knowledge Base →
  • The HR area now asks before something is deleted or leaves the house

    Across 48 HR screens - absences and absence types, teams and cost centres, payroll, time tracking, expenses, benefits, compensation, onboarding, shift planning, surveys, feedback, recruitment, IT assets, the employee file and the workflow building blocks - 85 buttons used to fire on the first click: a deleted time entry, an approved or rejected expense report, a terminated employment, an invitation on its way. Each of these now shows a confirmation that names the consequence - the affected record by name, the number of records for bulk actions, and the recipient wherever something goes outside. Eight places deliberately get no extra dialog, because you have already filled in fields there and the send button itself is the confirmation: payroll mail dispatch, replying in the whistleblowing inbox, terminating an employment, inviting an employee, rejecting a profile change request, rejecting a residence permit request, the payroll office export, and messaging an applicant. Those eight panels now also respond to the Enter key. On top of that, every browser window has disappeared from the HR area - confirmations are now dialogs of the interface everywhere, which makes them consistent in the dark appearance and with screen readers.

  • The locked “Work Email” field in the personnel file now states why it is locked

    Under Personal details ‣ Contact the work email address could not be edited and nothing said why. Together with the fields of a freshly created employee, which are simply still empty and therefore look grey too, this gave the impression that the whole edit area accepted nothing. Every other field was and is editable - phone, private email, street, postal code, city, region and country. Only the work address is locked, and it now carries its reason: it belongs to the employee's sign-in account, and changing it in the personnel file alone would diverge from the sign-in address. A dedicated way to change that address is being prepared.

    Open the Knowledge Base →
  • Two field captions in the employee portal are now linked to their field

    the year filter under Payslips and the self-assessment comment box under Performance carried a caption that was not technically linked to the field. Clicking the caption therefore did not put the cursor in the field, and a screen reader announced the field without a name. Both are fixed; nothing changes visually.

    Open the Knowledge Base →
  • The employee portal now uses the shared interface controls throughout (technical, #1798)

    In the employee portal - sign-in, My profile, absences, time tracking, shifts, documents, payslips and performance - buttons, text, choice and multi-line fields, checkboxes and all four list tables now come from the shared interface toolkit instead of each page carrying its own code. That makes the portal the first of six surfaces to be fully converted. What stays the same: layout, labels, colours and workflows; input fields keep their familiar height and text size, so they stay easy to hit on a phone and tapping one does not zoom the view. What visibly changes: the four lists (absence requests, time entries, documents, payslips) now use the shared table presentation - slimmer uppercase column headings, a paging bar that also shows "of how many", and placeholder rows while loading instead of the "Loading..." line. The rejection reason of a declined request still sits directly beneath the request and does not have to be expanded. What becomes consistent: keyboard focus, contrast in dark appearance and the behaviour of disabled fields; the star rating in the self-assessment and the menu button in the mobile header also carry a screen-reader name for the first time. Nothing changes about permissions, data or calculations. My Area, My Absences,

    Open the Knowledge Base →
  • "My area" stays usable when a single section is stuck – and the presence switch explains itself

    On the employee-portal home page (My area), a single unavailable tile used to tip the entire page into "Failed to load overview" – taking five working tiles with it. Now: the page still loads, shows every tile it can retrieve, and puts a note "Some sections are unavailable" above them that names the affected section (e.g. "Open surveys"). You can see at a glance which figure is missing and which one is correct, instead of facing an empty page. Second: the "Available / Away" switch in the user menu was already hidden for accounts with no linked employee record – typically the owner login right after setup – but the interface still queried the state on every page load and ran into an error doing so. It no longer asks at all when the HR area is switched off for the workspace, and otherwise receives a clear "this account has no employee record" answer instead of an error. Nothing changes about permissions, data or calculations.

    Open the Knowledge Base →
  • Google Calendar: callbacks from Google now have to prove themselves

    The address Google uses to tell us "something changed in this calendar" was previously open to anyone who knew the internal identifier of a watch channel - such a call triggered a full sync with Google. Nobody could read or change anything that way: the response carries no appointments, and the sync only pulls data from Google to us. What it did allow was burning through your Google account's request quota; once that is exhausted, the calendar connection fails for every employee. A callback is now only accepted if it carries the proof Google received from us when the channel was set up - a separate value per channel, which we ourselves only store as a checksum that cannot be reversed. Everything else is rejected and recorded in the operations log. Nothing changes in how you work. One-off, appointment changes may take up to an hour to appear - via the next regular sync rather than immediately: channels set up before this change do not carry the proof yet and are renewed automatically.

    Open the Knowledge Base →
  • Google Calendar: real-time connections are renewed instead of multiplied

    On every sync run - hourly by default - SCS opened a new real-time connection to Google for every synced person instead of keeping the existing one, and never cancelled the superseded one at Google. Since each connection is valid for seven days, up to 168 simultaneously active connections per person and calendar accumulated; 167 of them were no longer recorded in SCS at all and still reported every calendar change. The consequences were needless consumption of your company's Google quota - in the worst case up to a lockout of the calendar connection for all employees - and a permanently open security notice in the operations log that looked like an attacker even though SCS was knocking on its own door. From now on: a connection still valid for more than a day is kept as it is; renewal happens shortly before expiry, and the superseded connection is stopped at Google in the process. The connections that have already accumulated are cleared up automatically: as soon as one of them reports in again, it is recognised and stopped - with no operator action. Such own leftover connections are now unambiguously distinguishable from a genuine foreign access in the operations log; both continue to be rejected. Nothing changes in how you use the feature - events appear in the team calendar unchanged and just as quickly. The response of "renew real-time connection" now also names how many connections were skipped and how many old ones were stopped.

    Open the Knowledge Base →
  • HR area and time-tracking tools moved to the shared interface controls (technical)

    In the HR area - including employee records, benefits, succession planning, career frameworks, shift planning, recruitment, team/company calendars, tasks, templates and "My area" - as well as in the time-tracking tools (time-entry editor), buttons as well as text, choice and multi-line fields now come from the shared interface toolkit instead of each component carrying its own code. Look and handling stay the same; what becomes consistent is keyboard focus, contrast in dark appearance and the behaviour of disabled fields. The tables on the shift-planning, cost-centre, reports and absence-planning pages, and four choice/multi-line fields with a distinct look (benefits, career frameworks, org chart, succession planning), are not yet converted and will follow later.

    Open the Knowledge Base →
  • Unique page titles

    Several help pages carried exactly the same name as a page of the same name in another area, which made them impossible to tell apart in search results and listings. Affected in this area: Tasks (HR) and Locations (HR). The page addresses do not change, so saved links and bookmarks keep working.

  • Whoever registers a workspace now has their own employee record

    Until now, registration created only the administrative owner login – HR → Employees was empty, and the employee portal home page (My Area) stayed blank for the only person in the workspace; the "Available / Away" switch did not appear at all. New: creating the workspace now also creates the matching employee record, linked to the owner login. Only what was entered during registration is carried over – first name, last name and email address. The hire date is set to the registration date; if that is not the actual start date, change it in the employee record. Every other field (address, phone, date of birth, bank details, department, position) stays empty – nothing is invented. The email address is stored encrypted, as in every employee record. Existing workspaces are filled in automatically, with no operator action required; anyone who already has an employee record, or deliberately removed one, gets neither a second one nor it back. If the HR area is not enabled for the workspace, the record is still created – it costs nothing and prevents exactly this dead end once the area is switched on. My Area,

    Open the Knowledge Base →
  • "My Profile" is now either "My Profile (Account)" or "My Profile (Personnel Data)"

    Two different Knowledge Base pages carried the same title "My Profile" - one for your sign-in and account settings (password, passkeys, language and time zone), one for your own personnel record (identity, contact details, employment, bank details). In Knowledge Base search and in search engines the two results were impossible to tell apart. The titles now say which is which. Nothing changes about the content, the addresses or any link - only the heading and the title in the result list. My Profile (Account),

    Open the Knowledge Base →
  • Change-request notification now names the workspace and the person

    The email to the reviewer ("New change request from …") had four flaws. The sender read "Mein Shop" - the factory default of the workspace name that nobody ever typed - and the same placeholder appeared in the body text ("… requested a change at Mein Shop"). The salutation was a bare "Hallo," with no name, even though the recipient is known - they are the person approving the request. And in the footer the product name "SELLERLOGIC SCS" sat as a loose grey line above the provider identification, unlinked and visually cut off. If a workspace name is set, it now appears in both the sender and the body; if none is set, the product name appears instead of a placeholder. The salutation uses the reviewer's first name - if no first name is on file, a general but complete salutation appears, never an open gap. The footer is a designed unit and the product name links to the product page. The template is now also available in English. The sender name affects all outgoing emails, not just this one: workspaces without a name now send under the product name instead of "Mein Shop"; a self-chosen name is untouched.

    Open the Knowledge Base →
  • Earlier compensation periods can now be backfilled, corrected and removed

    The compensation history in the employee file (Personnel → Employees, "Compensation" tab) could previously only be carried forward. Anyone who only received the most recently maintained amount at go-live ("Not stated") could not add older pay steps - and a typo in a recorded period stayed there for good. Closed periods in the past can now be backfilled, edited and removed. Three rules apply: start and end are both mandatory (a backfilled period is always closed - there is no "until today" here), a reason is mandatory just as for any change, and periods must not overlap - they may be adjacent, and gaps are explicitly allowed: if an intermediate period is unknown, that does not block backfilling the older ones. The currently valid compensation ("until today") stays locked on this path and is still carried forward exclusively through "Adjust compensation" on the contract; a backfilled period must end before it starts. A pay rise in the middle of an already recorded block is modelled in two steps: shorten the existing period to the day before the rise, then backfill the new period with the higher amount. All of this requires the "manage HR" permission; amounts remain encrypted, and the audit log records who created, changed or removed which period and when - without the amount. Rollout status: the capability is available through the API first; the controls in the "Compensation" tab follow with the next release.

    Open the Knowledge Base →
  • Year calendar legend now shows the actual colours

    Under My area → My absences (and in the employee file, "Vacation" tab), the six colour patterns in the legend below the year calendar did not match what the calendar days actually showed: the legend displayed a fixed indigo for "Absence", "Absence on a non-working day", and "Requested", while the calendar days themselves used the real colour configured for that absence type - typically green for vacation or yellow for sick leave. Anyone using the legend to read the calendar could not find the colour they were seeing. The three affected legend entries now show the same colour as the calendar days; for a tenant with no configured absence type, the previous placeholder colour remains. Requested and approved absences remain distinguishable as before - approved days are filled solid, requested days are only outlined; that distinction was not affected by the colour issue.

    Open the Knowledge Base →
  • Cards and rows in several personnel areas now work fully with the keyboard

    A number of clickable cards, rows, and toggles previously responded only to a mouse click - anyone navigating by keyboard (Tab key) could not reach them. This affected, among others, the entries in the audit trail, the team cards under Personnel → Teams, the competency cards, and the candidate and evaluation cards in the recruitment pipeline, as well as the "holidays count as a workday" toggle in an employee's time tracking. These elements can now be tabbed to and activated with the Enter key - exactly like a mouse click. Nothing changes in the behavior itself. In addition, the invisible click-outside areas that close a dialog or dropdown were cleaned up in many places - these were previously mistakenly exposed as an operable control, even though closing was always already possible via the visible close button. Audit Trail, Teams, Performance Reviews,

    Open the Knowledge Base →
  • Employee search finds long-standing existing employees again

    The search under Personnel → Employees returned no match for people created before the switch to the encrypted personnel file - even though the record existed and could be opened from the list. For data-protection reasons the search does not work on the plain text but on an encrypted search value per field (first name, last name, employee number, business email); that search value was missing for existing records. A follow-up run now fills it in automatically during rollout - without any operator action and without changing the data itself. Also fixed: if the follow-up run could not process a tenant system, that system was still permanently marked as done and never retried - the search would have stayed empty there forever. Such cases are now detected and picked up automatically on the next start. Nothing changes in how you work; the search behaves exactly as before, but finds all employees again.

    Open the Knowledge Base →
  • Bank details, ID numbers, insurance and emergency-contact data: existing records are now encrypted too

    Details newly entered in the personnel file under Personnel → Employees - bank details (IBAN, BIC, account holder), ID and passport numbers, health, pension, unemployment and care insurance, plus the name, phone and email of the emergency contact - have been stored encrypted for some time. Records created before that change, however, were still held unencrypted in the database. A conversion run is now available which your operator triggers per tenant; it converts the existing records and removes the unencrypted copy. Nothing changes for you in day-to-day use: every field is displayed and edited exactly as before, both before and after the run. The payroll export to tax advisors and payroll offices also still contains the health insurer in full - it previously read only the unencrypted copy and would have left the field empty after the run. Employees,

    Open the Knowledge Base →
  • Document templates: the email placeholder shows the address again

    When a template under Personnel → Document templates contained the {{employee.email}} placeholder, the generated document did not show the email address but an unreadable string such as "enc:v1:…". The reason: the work email address is stored encrypted in the employee record, and document generation copied the stored value into the placeholder without decrypting it first - unlike the date of birth, which was already handled correctly. Newly generated documents now carry the address in plain text. Documents generated earlier are not changed retroactively; regenerate them if needed. No other placeholder was affected - street, city and postal code are stored as plain text, and the date of birth was already decrypted correctly.

    Open the Knowledge Base →
  • Employee lifecycle: creating events, terminations, and probation periods works again

    Creating a lifecycle event, a termination, or a probation period under Personnel → Lifecycle used to fail with a server error - the page itself loaded, but every write action failed. The cause was an internal programming error: resolving the acting user came up empty, so no record could be created. All write actions work again now and reliably record the acting user. Without a valid session the endpoint now responds cleanly with "not authenticated" instead of a server error. The same defect also affected approving/rejecting procurement requests (the actor column stayed empty), IT asset actions - assign, unassign, retire, maintenance - (actor column stayed empty), and creating shared calendars (creator stayed empty); those are fixed as well. Employee Lifecycle, IT Assets,

    Open the Knowledge Base →
  • Payroll: gross pay is calculated correctly again

    The payroll run under Personnel → Payroll was wrong in three ways. First, paid absence days were paid twice: the run applied the full monthly salary and then added the absence days on top - on a 60,000 € annual salary with five paid absence days that produced 6,153.85 € instead of 5,000 €. Paid absence is already covered by the monthly salary; it is now only shown as a separate "Absence Pay" line and deducted from base pay by the same amount - the two lines add up to the monthly salary again. Second, time entries still in "Draft" fed into the run even though they had never been submitted or approved; only approved time entries are counted now. Third, an approved supplement never appeared on any payslip - amounts approved under Compensation → Supplements were never read by the payroll run. Approved supplements now increase gross pay, appear as their own column in the payslip list, as their own line on the PDF payslip, and as their own wage type in the DATEV/CSV export; after the run they are set to "Processed" and are not paid out again the following month. Important for runs already completed: their amounts were produced by the old calculation and do not change retroactively - a recalculation of existing runs will be provided separately. Payroll,

    Open the Knowledge Base →
  • Team calendar and absence planning: weekends and holidays are no longer colored as a vacation day anywhere

    An approved or requested vacation spanning a weekend used to show every day of the range as filled/red in the team calendar (Personnel → Calendar & Holidays, "Team" tab) and in Absence planning - including Saturday, Sunday, and holidays that never cost a vacation day. Both views now show only actual working days as an absence; a holiday inside the period stays recognizable as such (green) instead of appearing as the person's vacation day, and absence planning now marks holidays even on days without an absence entry. The team calendar resolves each person's own holiday calendar individually - two employees with different countries now see their own holidays in the same period instead of German holidays applied to everyone. The underlying vacation calculation itself is unchanged - it was already correct; only the display was brought in line with it. Calendar & Holidays,

    Open the Knowledge Base →
  • Employee portal: the worst mobile layout breaks are fixed

    The shift plan showed its week view in seven side-by-side columns even on a phone, each column about 38 pixels wide and therefore unreadable; the days now stack and only move back alongside each other on wider screens. The three tiles of the overview bar on the home page stack as well, instead of sharing a narrow screen between them. The menu can be hit reliably with a finger and scrolls on its own on short screens instead of being cut off at the bottom. Long e-mail addresses, personnel numbers, shift names and goal descriptions now wrap instead of running past the edge. The wide tables (payslips, time tracking, absences, documents) still scroll sideways - but only the table itself, no longer the whole page.

    Open the Knowledge Base →
  • Downloaded files now carry the display name

    Report exports are named after the report itself instead of “hr-report-…” with a timestamp. Documents from the personnel file and the employee portal are named after their document title, and CV downloads after the candidate (“Lebenslauf-<name>”). Umlauts and spaces are preserved.

  • Backdated absences no longer sit around as "Pending"

    When you recorded an absence after the fact whose period was long over - say a vacation day of 15 April entered in August - you got an ordinary request in status "Pending". It then sat under "Past absences" waiting for an approval on a period that was no longer up for decision, and the entitlement stayed untouched in the meantime. Now, when the entry is made by someone who may approve absences (permission "Manage HR" or "Approve absences"; owners and super administrators anyway), it is created as "Approved" straight away and the entitlement is booked in the same step. The entry permanently carries the marker "Backdated", and the event is logged separately - so a backdated entry stays distinguishable from a regular approval. Without the approval permission nothing changes: the request goes to review as "Pending" - there is deliberately no self-approval loophole. The reviewer now sees it clearly marked, though: next to the status it reads "Backdated entry - lies in the past", both in the request list and in the detail panel. Requests for the future do not change - they go through approval unchanged, even when the requester would be allowed to approve. If an absence type explicitly requires the four-eyes principle, a backdated entry for your own period still needs an approval. Requests for past periods that are already pending stay untouched and can be approved as usual; the day count is unaffected (weekends and public holidays are deducted as always). Manual,

    Open the Knowledge Base →
  • Changing compensation: with a reason, an effective date - and a full history

    In the employee record under HR → Employees, tab "Compensation", the amount could previously only be overwritten. Why it had changed, from when the new amount applied and what applied before was afterwards nowhere to be seen - unless you created a whole new contract for it. When you now change the compensation, the commission amount or the commission type, the form asks for two additional entries: a reason for the change (mandatory, e.g. "Pay rise from target agreement") and an effective from date, pre-filled with today and selectable in the future as well. Below the fields you now find the compensation history: a list of all compensations with period, amount, commission and reason, newest first; the currently valid entry runs open as "until today". On saving, the previous entry ends on the day before the effective date and the new one starts on that date - with no gap. Each employee's most recently maintained compensation was carried over automatically as the first entry when this shipped, with the contract start as its start date and without a reason ("Not stated"), because none was recorded for the past. If a change does not touch the compensation at all - a mere title correction, say - no reason is required and no entry is created. Changing it still requires the "manage HR" permission; amounts are stored encrypted in the history just as on the contract, and every change is written to the audit log.

    Open the Knowledge Base →
  • Consistent wording for compensation, employees and tasks

    The same thing used to go by different names depending on the page - "Gehalt", "Lohn" or "Vergütung" in German; "Employee", "Staff" or "Team member" in English; and the German interface said "Tasks" in some places and "Aufgaben" in others. This is now unified, with no change in behaviour whatsoever. In the HR area the umbrella term is "Vergütung" everywhere in German (e.g. the contract field, the "Vergütungsänderung" event, the sidebar group); "Gehaltsabrechnung" still means the payroll run and the payslip document, the individual runs are now called "Abrechnungsläufe", and the export for tax advisors and payroll offices is the "Abrechnungsexport". Payslips now simply say "Brutto" instead of "Bruttolohn", in the employee portal as well. Established external terms such as "Lohnbüro", "Lohnbuchhaltung" or the DATEV payroll remain deliberately unchanged. The English interface consistently says "Employee" instead of "Staff" or "Team member" - including appointment scheduling and telephony, where the very same people are meant. And the German interface consistently says "Aufgaben"; English keeps "Task". All of this is backed by a new, binding terminology glossary that automatically prevents future drift. Employees,

    Open the Knowledge Base →
  • Employee record: clearer label for the work email

    In the German interface the field for the work email address in the employee master data is now labelled Geschäftliche E-Mail. The English label ("Work Email") is unchanged; only the German wording changes.

  • Rejected and cancelled requests no longer disappear without a trace

    Under My area → My absences, the year overview only ever showed approved and pending requests - a rejected or cancelled request was then nowhere to be found, with no indication of why. A new "All requests" tab now shows every request without exception, filterable by status, with a text-labelled status badge. Clicking a request opens a detail panel with the date range, days, reason, and - for rejections - the stored rejection reason and who decided; for cancellations, whether you cancelled it yourself or HR did. The year overview itself stays unchanged, focused on approved/pending days - that remains intentional. In the employee portal (My absences), the rejection reason is now also shown directly in the request list.

    Open the Knowledge Base →
  • A failing document download now tells you why

    Under My area → My documents, clicking "Download" could fail with a generic server error. All you saw was "Download failed" - indistinguishable from a mistake on your side, and with no hint whether trying again would help. You now read what actually happened: if the file is no longer present in the document storage, the message reads "The stored file is no longer present in the document storage. Please contact HR." - trying again does not help in that case. If the storage is only temporarily unreachable, you are asked to try again in a few minutes. Both cases are additionally recorded for operations so the cause stays traceable. Nothing changes about the document entry itself or about your access rights.

    Open the Knowledge Base →
  • Adjust leave entitlement manually - traceable and immutable

    In the employee file under People → Employees, "Vacation" tab, you can now manually adjust an employee's leave entitlement up or down - in whole or half days, with a mandatory reason and for a specific year. Typical case: someone works on a public holiday and is credited a day for it. Every adjustment is its own immutable position (who, when, how much, why); a correction of a correction is a new position, nothing is overwritten. The allowance tile now shows the base entitlement and, beneath it, each adjustment individually - in the employee file as well as in the employee portal. The remaining entitlement and the vacation calculation take the adjustments into account automatically. Only people with the "Manage HR" permission may create an adjustment; every change is recorded in a tamper-evident audit log. Adjust leave entitlement manually,

    Open the Knowledge Base →
  • Create, edit and suspend holidays manually - and mark them as half days

    In holiday management (HR → Calendar & Holidays, "Holidays" tab) you can now fully maintain your own holidays: create, edit and suspend or reactivate them per row. Two new markers are added. Half day off deducts only half a working day in the leave calculation (0.5 instead of 1.0). Suspended keeps a holiday visible and labelled but does not count it as a day off - meant for holidays suspended due to war or by the authorities (e.g. "(призупинено)" in Ukraine). Manually maintained holidays flow into the holiday list, team calendar and leave calculation through the same path as the automatically imported ones: if you add a missing Ukrainian substitute holiday, for example, a leave request spanning that day then consumes no vacation day. The automatic reconciliation with the official source never overwrites your manual entries. All of this only with the "Manage HR" permission and fully audit-logged.

    Open the Knowledge Base →
  • HR documents download under their display name

    An HR document is given a display name in the employee file (HR → Employees, "Documents" tab) - for example "Arbeitsvertrag.pdf". On download, however, the file landed on disk under its internal storage name - such as "document.pdf" - so the name you had assigned was lost. This affected both the employee file and the employee portal under My area → My documents. The file now carries the display name in both places; umlauts and special characters (for example "Gehaltserhöhung Müller.pdf") are preserved correctly. If no display name is set, the original file name is used as before. Manual,

    Open the Knowledge Base →
  • Ukrainian substitute holidays now appear automatically, and the calendar dropdown matches the country

    For employees with country Ukraine, the substitute Mondays were missing from the holiday list in the employee file ("Vacation" tab): when a holiday falls on a weekend, the day off is moved to the next working day under Art. 73 of the Labour Code (e.g. Women's Day Sun 08.03.2026 → Mon 09.03.2026, Constitution Day Sun 28.06 → Mon 29.06). This transfer now works the same everywhere - in the holiday list, the team calendar and the leave calculation: a leave request spanning such a substitute Monday no longer consumes a vacation day. The church holidays suspended due to the war ("(призупинено)", e.g. Orthodox Easter Monday and Whit Monday 2026) are still shown, visible and labelled "Suspended", but do not count as days off. Secondly, the calendar assignment dropdown previously offered a Ukrainian employee only the 16 German federal-state calendars; it now shows only calendars of the employee's country. A manually maintained holiday still always wins over the automatic derivation.

    Open the Knowledge Base →
  • Compensation shows up in the employee portal again - and is called the same everywhere

    Under My area → My profile the "Salary" field stayed empty even though the employee file showed an amount on the "Compensation" tab. The cause was the wrong data source: the page read an old employee column, while the amount is maintained on the active contract. The portal now reads the same source as the employee file - a change there is visible immediately, with no extra step - and shows the amount as a formatted currency value. At the same time the entry is called "Compensation (monthly)" in both surfaces instead of "Salary" in one place and "Base salary" in the other. Access is unchanged: you only ever see your own compensation, and you still cannot edit it there. Manual,

    Open the Knowledge Base →
  • New: absence planning - agree before you request

    Under My area → Absence planning there is a new, company-wide board: one row per person, one column per day. You see who is away when and in which state - solid = approved, outlined = requested, hatched = planned. The state planned itself is new too: you add your time off via "Add planning entry" without any commitment - no approval run, no deduction from your allowance, changeable and deletable at any time - agree it with your colleagues, and then turn the entry into an ordinary request via "Submit as request now". From there everything works as before. The board is deliberately company-wide and reachable by every employee; team and department filters are convenience only. You can see other people's entries, but you can only change and delete your own. On data protection: for colleagues you only ever see the period and the state, never the absence type; and only types released for planning appear at all - as delivered, holiday only. A sick note therefore does not show up for others in the first place. Your own entries, by contrast, always stay fully visible to you. Which types take part is configured by HR per type (Absences → Types, "Take part in absence planning").

    Open the Knowledge Base →
  • Public holidays in the team calendar: once, and in your language

    In the team calendar (HR → Calendar & holidays) regional public holidays appeared twice and always in English - Assumption Day on 15.08.2026 was listed twice below each other, in the detail panel as well. The cause was not a duplicate entry in your data: holidays that apply only in certain federal states are stored per state, and the calendar showed each of those rows separately. Assumption Day applies in Bavaria and Saarland, hence two rows. Both are correct and are kept. The calendar now collapses them into one entry and shows the name in the language of your interface ("Mariä Himmelfahrt" in German, "Assumption Day" in English). The detail panel now has an Applies in line telling you which regions the holiday counts for. The holidays themselves and the vacation calculation are unchanged.

    Open the Knowledge Base →
  • Requested vacation shows up in the year calendar right away, and weekend holidays stay visible

    The absence year view (employee portal under "My absences" and the employee file, "Vacation" tab) had two annoyances. First, a request you had just submitted did not appear in the twelve-month calendar. The allowance cards and the request list updated, but the calendar kept showing the state from before the request - only reloading the page brought it up. The request was never lost; the view simply was not refreshed after submitting. It now updates immediately, showing the requested period as outlined days. Second, public holidays that fall on a non-working day - 3 October or 26 December on a Saturday, for instance - disappeared behind the non-working-day colour and were no longer recognisable as holidays. They now stay red, additionally get a border in the non-working-day colour and are called "Holiday on a non-working day" in the legend; the tooltip names the holiday plus the qualifier "Non-working day". Neither change affects the vacation calculation: requested days are still not deducted, and a holiday on a day that is free anyway still costs no vacation day. Manual,

    Open the Knowledge Base →
  • Requests in the year view are now clickable

    In the absence year view (employee portal under "My absences" and the employee file, "Vacation" tab) the entries in the lists "Current & upcoming absences" and "Past absences" used to be display only - matching a calendar entry to a request meant comparing dates by hand. Clicking a list entry now highlights the request: its days and the affected months get an outline in the year calendar, the first affected month scrolls into view, and if the request lies in a different year the view switches there automatically. Clicking the same entry again removes the highlight. The selection is part of the address bar - the link can be shared and the highlight is preserved. Manual,

    Open the Knowledge Base →
  • The two absence lists now sit side by side on wide screens

    In the absence year view (employee portal under "My absences" and the employee file, "Vacation" tab) "Current & upcoming absences" and "Past absences" were stacked on top of each other precisely on large monitors, even though there was free space next to them. Both lists now sit side by side as soon as the area is wide enough - this no longer depends on the window size alone, but on how much space is actually available (pinned sidebar, employee file). If it is too narrow they still stack, so that date, number of days and status badge stay readable on one line and no sideways scrolling appears. Manual,

    Open the Knowledge Base →
  • Absence lists now sit at the top next to the allowances

    In the absence year view (employee portal under "My absences" and the employee file, "Vacation" tab) the lists "Current & upcoming absences" and "Past absences" were at the very bottom - you had to scroll past the whole twelve-month calendar to see what was coming up next, while the space to the right of the allowance tiles stayed empty. On wide screens both lists now sit directly to the right of the allowances and the calendar moves below them. In narrow windows the blocks still stack underneath each other, and no sideways scrolling appears. Numbers and behaviour are unchanged. Manual,

    Open the Knowledge Base →
  • Bulk actions in project time tracking work again

    Under People → Project time tracking, "Submit", "Approve" and "Reject" failed with a server error whenever they were applied to several selected time records - in the admin area as well as in the employee portal. Individual records could still be edited; only the bulk action always came up empty. The cause was a faulty hand-over of the selection to the database, so the action never ran at all. All three bulk actions now go through again. This also restores the employee-portal rule that you can only submit your own drafts there.

    Open the Knowledge Base →
  • HR area without initials circles

    The colored initials circle shown before names has been removed throughout the HR area: from the employee list and table, the employee detail view, the offboarding list, teams, time tracking (team weeks and live presence), the org chart, the team calendar (filter list, list view, event detail) and the social feed. Rows take up less horizontal space and the names are shown directly; a stored profile picture is still displayed. In live presence a green dot now marks who is currently clocked in.

    Open the Knowledge Base →
  • Reviewers are notified about change requests again

    When an employee submitted a change request for their own master data or their residence permit in the portal, sending the notification to the responsible reviewers failed with a server error. The request itself was stored and visible in HR administration, but nobody was actively told about it - so requests often sat untouched for days. The cause was a faulty hand-over of the recipient list to the database. Managers, deputies and holders of the "Manage HR" permission are now notified reliably again. Manual,

    Open the Knowledge Base →

Settings

  • A custom role's rank is now saved

    When creating or editing a role under Settings → Staff & roles, the rank set with the slider used to be discarded - the role kept the internal default of 0 and therefore always sorted to the bottom of any rank-ordered list, regardless of what was chosen. Reopening the role also showed the default of 50 again, with no indication that the actual value had never been saved. The rank is now persisted and shown correctly the next time the role is opened, and the role list sorts custom roles into their real place among the system roles.

    Open the Knowledge Base →
  • Permission changes take effect again in every company

    Roles, permissions and account changes are carried across in the background into the store that sign-in reads permissions from. For a single company that transfer could come to a permanent halt - permissions there stayed at the state of the day it stopped: a revoked permission kept working, a newly granted one did not apply. The trigger was an account whose e-mail address was still held by a deleted account; the transfer now frees the address before it writes, and retries individual conflicts instead of stopping the whole company. If one account still cannot be carried across, only that account is affected: every other account, role and permission of the company keeps being transferred, and the outstanding account is reported by name. On top of that, each pass now gives up after ten minutes per company rather than waiting indefinitely. Nothing to do on your side - the transfer catches up on its own.

    Open the Knowledge Base →
  • Back to account selection on a company's sign-in page

    Anyone who landed on the wrong sign-in page - a mistyped account name, an old bookmark, or a forwarded link - used to have to rewrite the address bar by hand to get back to the general account selection. Every company's sign-in page now shows a "Back to account selection" link right under the title. The link does not appear on the general address itself.

    Open the Knowledge Base →
  • Dropdowns in the settings area are now read out by name (#2859)

    Affected were the activity log with its area and method, custom dashboards with the report picker, the data explorer with field, operator, aggregation and sort field, the data warehouse with status and source type, report scheduling, plus the unit and currency fields of custom attributes and the language pickers in the translation view. Anyone using them with a screen reader heard nothing but "combo box" there - with no hint of what was being selected. All of them now carry a spoken name in German and English. Nothing changes visually. Activity log · Data explorer ·

    Open the Knowledge Base →
  • The language picker is now an ordinary select field (#2658)

    The language switcher in the user menu used to open a full-height side panel with a search box, flags and a check mark. That shape dates from the time the list held some 40 entries; what is offered today is exactly two, German and English. In place of the side panel there is now the same plain select field that the roadmap portal and the "My Profile" page already use. What changes for you is mainly that the control behaves the same everywhere and works reliably with the keyboard: you reach the field with the Tab key, typing the first letter jumps to the matching entry, and the input focus stays on the field afterwards. On a phone, the familiar picker of your device opens. The flags are gone on purpose: a flag stands for a country, not for a language, and screen readers announce it as a country name. Languages are now consistently named in their own language ("Deutsch", "English"), and the field has a fixed caption that a screen reader can announce. Which languages you can choose from does not change.

    Open the Knowledge Base →
  • The product bar and the quick search explain an empty product list (#2635)

    Signing in with an account that has no permissions recorded left the slim product bar on the left edge and the product list of the quick search simply blank - without a word about why. That silent emptiness is what a customer reported in August as "the navigation is gone", because a blank screen offers only one reading: the application must be broken. Both surfaces now say why nothing is there. The quick search carries the notice text, the product bar a marker that opens the quick search with the same text. The notice tells three causes apart and names them: no permissions are recorded (either nothing has been granted yet, or the permission service is unreachable - the two cannot be told apart from the outside), permissions that open no product area, or no product enabled for the company yet. No product the session may not enter becomes visible through this, and an account with permissions sees exactly its products and no notice, unchanged.

    Open the Knowledge Base →
  • You now switch your areas on and off yourself

    An area is a menu entry - a sub-page you see in the sidebar. Under "Settings → Areas" there is now a list of every area available to you, with a switch for each. Until now only the platform operator could set this for you. Whatever you switch off disappears from the menu and stops answering over the interface as well - an employee with the matching permission no longer sees the menu entry and cannot get in through the address bar either. Roles and permissions stay untouched: switch the area back on later and everyone holds exactly the rights they held before; nothing is deleted. While an area is off, its permissions do not appear in permission management - which keeps that list short and matched to what you actually use. Areas still being tested do not appear in your list at all; they are not "off", they are simply not yet intended for you. Some areas deliberately arrive with the starting value "off" and then carry the note "Default: off" - you can switch them on at any time. If you decided yourself and want to undo it, "Reset to default" takes you back to the state the area shipped with. Search and filters live in the address, so a view can be handed on as a link.

    Open the Knowledge Base →
  • New employees without a role now really do wait for approval

    Someone who had been invited, had set their password and had not yet been given a single role still ended up inside the admin area - where they saw nothing, because they held no permissions. The "Approval pending" page that exists to explain exactly this state was reachable, but nothing ever led there. From now on these people are taken straight to it, on every sign-in path: password, two-factor confirmation and passkey. As soon as you assign a role under Settings → Staff & access, the admin area opens on their next visit. Accounts with the superadmin and owner roles are exempt: they get in as before, even without an explicitly assigned role.

    Open the Knowledge Base →
  • Newly onboarded staff land on "Approval pending" again (#2833)

    Anyone who had been created as a staff member but had not yet been given a role was nevertheless let through into the console. What awaited them there was an interface without a single permission: pages that would not open, lists that stayed empty, and no indication that a grant was simply still missing. It looked like a fault, but it was the open step of assigning rights. The check now works again: if the role assignment is missing, every sign-in route - password, second-factor confirmation and passkey alike - leads straight to the Approval pending page, which names the situation and points to the responsible administration. The redirect is decided by the server rather than by the interface, so that all sign-in routes get the same answer. Nobody is locked out by this: existing accounts with an assigned role carry on unchanged, and the operator account with full access still reaches the console even in a tenant where no roles have been handed out yet.

    Open the Knowledge Base →
  • Sanctions screening, regional profiles and data subject requests work again (#2863)

    Four legally relevant functions were fully built and reachable from the interface - and still answered every call with a server error, because the storage behind them had never been created in the database. Affected were sanctions screening together with its screening log, the activation of a regional profile under Legal & Compliance, and the data subject requests under GDPR and CCPA that your customers raise in the shop and that you handle in the admin area. All four now store and read as intended; existing tenants get the storage automatically on the next update. On top of that, the GDPR Art. 20 data export now really includes the consent history and the product reviews a customer has written - both sections always came back empty before, which from the outside looked like "nothing on file". If a section of the export cannot be produced, the export now reports that as an error instead of passing off an incomplete archive as a complete one.

    Open the Knowledge Base →
  • The language picker now shows finished translations only (#2667)

    The language switcher in the header and the "Language" field under "My Profile" used to offer some 40 languages, of which only German and English are fully translated. Picking any of the others produced no translation but a largely English interface - a choice that could not keep its promise. What is offered now is exactly the set of languages whose texts are fully maintained, currently German and English. As soon as another language is finished it appears in the list by itself; nobody has to register it anywhere. If you had one of the removed languages set before, your interface now continues in German, with no error and no loss of data. Date, number and currency formats and the time zones are unaffected: they still follow your region, independently of the display language.

    Open the Knowledge Base →
  • An empty navigation is no longer possible (#2633)

    Until now the left-hand navigation hid every entry without a matching permission - and two central entries, Dashboard and My profile, were nowhere recorded as freely accessible. For an account without special rights that left no menu entry at all, and it did not look like a missing grant but like a broken application. Both entries are now explicitly listed as self-service and are visible to every signed-in account. On top of that, a note appears at the foot of the navigation as soon as no permissions are recorded for your account: it names the two possible causes - access not granted yet, or the permission service currently unreachable - and makes clear that the application itself is working normally. My profile and Sign out are always reachable in that situation. And a saved personal ordering can no longer swallow a menu entry in silence: if it points at a group that no longer exists, the entry stays where it was.

    Open the Knowledge Base →
  • The left-hand navigation can be shown again on a desktop machine (#2617)

    If you had collapsed the left navigation with the small arrow in its header, there was no way back to it on a desktop machine: the menu button that offers the way back exists on narrow screens only, and the slim product bar on the left edge carries product names such as "HR" or "Shop" - it does not announce the way back. That is why the navigation was there on a phone but seemed to be gone on the PC. The product bar now carries a dedicated Show navigation button for as long as the bar is collapsed. On top of that, a saved personal navigation layout can no longer empty the bar completely: if your own arrangement hides every group, the standard navigation reappears with exactly the entries you are entitled to.

    Open the Knowledge Base →
  • A takeover no longer ends on the locked area, and page titles are readable again (#2467)

    When a SELLERLOGIC colleague was working on your behalf and opened an area of the platform console - via the browser's back button or a reload, for example - the notice "Product not released yet. Contact your account manager." appeared. For a running takeover that was factually wrong, and it was a dead end on top. Such addresses now take you straight back to your start page. On top of that, the header of some console pages showed the raw address fragment instead of a translated title (a lower-case "tenants", for instance); all page titles are translated again.

    Open the Knowledge Base →
  • A sign-in is now valid for at most seven days

    Until now a running session silently extended itself by another seven days with every use. Anyone who opened the console at least weekly therefore stayed signed in indefinitely, without ever entering a password or using a passkey again - 19 days in a row in one measured case. From now on a fixed upper limit applies: seven days after your last real sign-in the console takes you back to the sign-in page once, regardless of how active you were. The deadline starts again with the new sign-in. The reason is the protection of your account: a session credential that had been stolen once never expired on its own as long as it was being used. Nothing changes for you in day-to-day use apart from this recurring sign-in - save longer entries as you go if you keep the console open across several days. Sign-in in the storefront for your own customers is not affected.

    Open the Knowledge Base →
  • An account lock now applies on every way into the platform console

    When an operator account locked itself out after several failed attempts, that used to block only the password sign-in. Switching over from an area the same person was already signed in to still landed in the console - that path checked only whether the account was still active, not whether it was currently locked. The same was true for the second-factor prompt during the switch. Both paths now check the lock exactly as the password sign-in and the passkey sign-in do; the message is the same everywhere and states in how many minutes you can try again. Nothing changes for your company area - it was never affected by a console lock and still is not.

    Open the Knowledge Base →
  • Cookie-consent receipts are now stored encrypted (#1603)

    When a visitor makes a choice in the cookie notice, your shop keeps a receipt of that decision - including the visitor's IP address and browser identification, because without them the consent could not be evidenced. Both were previously stored in the clear. From now on they are stored encrypted, using the same mechanism the system already applies to other personal data fields. Existing receipts are carried over automatically in the background; there is nothing for you to do. Nothing changes in the display, the handling or the analytics, and the receipts remain fully usable as evidence.

    Open the Knowledge Base →
  • Google connections can now be reviewed in one place and revoked in one go (#1255)

    SCS keeps Google credentials in four places spread across three areas - the appointment module's service account for syncing your staff list, the HR calendar connection, your employees' personal calendar connections, and the marketing link to Google Ads or Search Console. Until now each area only had its own disconnect button. Revoking access in one area silently left a still valid Google credential behind somewhere else. Two new endpoints close that gap: a disclosure that lists all four places together with how many credentials each currently holds - so a data subject or deletion request no longer requires knowing which area might hold something - and a full revocation that clears all four in a single call. The full revocation asks for an explicit confirmation, because it disconnects the tenant from every Google service and cannot be undone. The existing per-area disconnect buttons are unchanged - disconnecting only the HR calendar does not cost you the marketing integration. A user interface for the full revocation will follow; today both calls are reachable through the API.

    Open the Knowledge Base →
  • Permissions of the "Managing director" role that were displayed but did not take effect (#2150)

    During a system change on 22 Aug 2026, 26 permissions of this role were stored in an outdated notation for a few hours. Nothing about this was visible - the permission matrix showed the role fully equipped, yet for 20 of those permissions the system still denied access, because it no longer recognises the old notation. Among the areas affected were settings, order and product editing, and background jobs. A background reconciliation now lifts these entries onto the current notation automatically; there is nothing for you to do, and no permission is lost in the process. Roles you created yourself are never touched, even if they carry the same name.

    Open the Knowledge Base →
  • Signing in no longer ends in a dead end, and a reload keeps you signed in (#2467)

    Three things that occurred together are fixed. First, signing in could land on an area that is not released for your own company at all, showing "Product not released yet". The redirect now decides by the session that is actually active and only ever leads somewhere the account may go. Second, on a locked area the menu disappeared, so the only way out was the "Back to dashboard" button - no matter whether you arrived via the sign-in, a bookmark or a shared link. The product bar and the menu now always stay in place; the lock itself is unchanged. Third, a session in which a SELLERLOGIC colleague works on your behalf did not survive a reload: every reload signed you out. That is fixed too.

    Open the Knowledge Base →
  • The help link in the setup assistant opens a new tab

    The help block at the end of the assistant is there for when you are stuck - so it is usually clicked in the middle of filling something in. Until now it replaced the assistant in the same window, and whatever you had already entered under Confirm company details without saving was gone afterwards. The link now opens in a new browser tab: the window with the assistant stays exactly as it was, entries included. The link also names the target page instead of describing it by category.

    Open the Knowledge Base →
  • The manual link in the setup assistant now opens in a new tab

    At the bottom of the setup

  • "Disconnect" on a connected app now asks before the connection is gone

    In the app configuration, under the Sign in tab, a Disconnect button sat next to the connected address and fired on the first click. That severed the connection and revoked the stored access token - the app stopped working until somebody signed in with the provider again, and this screen offered no way back. A confirmation now appears first; it names the affected address and states that this cannot be undone. Only your confirmation disconnects. Connecting is unchanged - signing in with the provider stays a single click, because it can be undone at any time.

    Open the Knowledge Base →
  • An overdue process now becomes additionally visible one level up

    If a process stays undecided for longer than its deadline allows, it also appears in the worklist of the responsible person's supervisor. It does not move - the responsible person keeps it, otherwise they would lose sight of it and the responsibility would be blurred. This happens exactly once and one level far: the process does not climb the whole management chain day by day. If no next level is recorded for the responsible person, the process stays where it is and the gap in the personnel data is reported to your administrators - it does not vanish silently.

    Open the Knowledge Base →
  • Analytics now asks before anything disappears for good (#1916)

    Under Analytics → Data warehouse the bin icons removed an ETL pipeline, a materialised view, a BI connection or a retention rule on the first click - no question asked and no way back. The same was true for a tile under Analytics → Dashboards and for a schedule under Analytics → Report schedules. All seven of these deletions now show a confirmation that names the affected record. Creating, editing and saving are unchanged - they still happen without a confirmation, because they can be taken back.

    Open the Knowledge Base →
  • Open worklist entries now close even when a notification failed to fire technically (#2287)

    An entry in your worklist - an approval, for example - disappears once the underlying matter has been decided. Until now that depended solely on the moment of the decision; if the notification about it technically failed to fire, the entry stayed open even though there was nothing left to do. A recurring background reconciliation now also checks open entries against their actual state and closes them after the fact whenever the direct closing once failed to happen. You will only notice this if an entry would otherwise have been left stuck - it now disappears on its own, at the latest with the next reconciliation.

    Open the Knowledge Base →
  • Settled processes can now be read up in the archive

    When a process disappears from your worklist it is not gone - under Settings → Notifications → Process archive you will find it again, with when it was raised, when it was settled and the path by which it was closed: by the decision on the process itself, or by the periodic reconciliation that closes a forgotten entry after the fact. If a process reached you through escalation, the row says so too. Search, process kind and page number live in the address bar, so a view can be bookmarked as a link. You only ever see your own archive; that is enforced on the server, not merely hidden. Nothing is deleted - how long entries are kept is still an open decision. What the archive deliberately does not claim: who decided. That is recorded on the process itself, and a guessed name would be worse than none.

    Open the Knowledge Base →
  • The bell is now a worklist, not a chronicle

    alongside the existing messages (release, maintenance, security) it now holds processes - things waiting for an action from you. A process appears for exactly the person meant to decide it, shows how long it has been waiting, a deadline marker ("on track", "due soon", "overdue") and what to do, and disappears on its own once the matter is settled - whoever settled it. The number on the bell therefore means "this much is waiting on me" instead of "this much has happened". The deadline marker never relies on colour alone: each state also carries its own icon and its own wording. Processes deliberately cannot be switched off - whoever could switch off their worklist would leave approvals sitting for weeks without anyone noticing. Absence requests come first; further process kinds follow.

    Open the Knowledge Base →
  • The help navigation now behaves the same inside the product and on the public site - and is usable on a phone again

    The two versions used to build their menus separately, which produced four differences on identical content: pages within an area were sorted by your browser's language setting rather than the language of the content, the What's new entries were missing from the in-product rail entirely, and clicking the area you were already in took you back to the start page instead of to that area's overview. Both menus are now derived from one shared source, so those differences are gone. On narrow screens the article now comes first: in the CRM area, 68 expanded entries sat above the text, and measured at 390 pixels wide the article did not start until 2527 pixels down - a good three screens of scrolling. The navigation now sits behind the Navigation button and slides in over the text; Escape closes it. There is also a new filter field above the list: looking for "Calls" is three keystrokes rather than a scroll. The Platform area remains in-product only and visible to operator accounts only - it is not merely hidden from the public site, it is not present there at all.

    Open the Knowledge Base →
  • You can now unsubscribe from emails for individual process kinds

    Under Settings → Notifications → Process notifications you decide per process kind whether you want an email about it. The setting applies to you only. Your worklist is not affected - the bell entry deliberately cannot be unsubscribed from, because anyone who could switch off their worklist would leave approvals sitting for weeks without anybody noticing. Process kinds whose email is compulsory, or that send no email at all, are shown with a greyed-out switch rather than hidden - so you can tell they exist.

    Open the Knowledge Base →
  • "Legal & Compliance" now only shows up for someone who can actually open it

    The menu entry under Settings was visible to practically every role, but only actually led to content for the Administrator and Super-Administrator - everyone else saw a dead entry. That happened because visibility was tied to a different permission than the page itself. Both now match: if you cannot open the page, you no longer see the menu entry either.

    Open the Knowledge Base →
  • A cancelled invitation no longer leaves a half-created employee

    Previously, sending an invitation created the account, the personnel file, the employee record and the invitation link one after another. If anything went wrong along the way, whatever had already been written stayed behind - and a second attempt with the same address did not simply pick up where it left off, it failed with an internal error. This also affected the harmless case of inviting an address a second time while the first invitation was still pending: instead of the message "A user with this email already exists", you got an error. Both are fixed. The four records are now created in one go - all or nothing - and a second attempt always leads to a complete result. Older leftovers from before this fix are detected and picked up automatically.

    Open the Knowledge Base →
  • A permission change now takes effect on its own, with nobody having to step in

    After you removed or granted a permission for a role under Staff & roles, sign-in could keep deciding on the old state for a long time - a revoked permission stayed effective, a granted one did not take hold. The cause was a sync between two data stores that a person had to trigger by hand; if it was not triggered, the old state simply stayed, and there was nowhere you could have seen that. That sync now runs by itself and repeatedly. Nothing changes for you in day-to-day use - a permission change takes hold from the next sign-in, or as soon as the current access token is renewed, with nothing further to do. Newly created workspaces are covered from the start.

    Open the Knowledge Base →
  • Five areas now demand a permission instead of a mere login

    Review moderation, product streams, custom product fields, the timezone together with the business hours, and the entire marketplace administration checked no permission at all on the server - being logged in was enough. Anyone who had taken the matching permission away from a role under Staff & Roles saw a boundary in the interface that the server did not draw: the call went through anyway. From now on: approving, rejecting, answering or deleting a review requires Moderate reviews; product streams and custom product fields require Edit products; timezone and business hours require Edit settings; the marketplace administration (configuration, contracts, vendors, listings, commissions, payouts) requires Edit marketplace. The shipped roles lose nothing - super-administrator, administrator and editor already carry all four permissions; the viewer was never meant to edit these areas and now cannot. If a role you created yourself is affected, grant it the named permission once.

    Open the Knowledge Base →
  • Inviting, editing and removing a team member can now be granted separately - and the subscription is protected again

    Staff & Roles already had separate checkboxes for "Invite", "Edit" and "Remove" in the Team area, plus "Read billing" - they just had no effect: a role without those checkboxes still got through, and a role with exactly those checkboxes (and nothing else) did not. Both directions are fixed now. This mostly shows up on a custom-built role that carries only one of these permissions - a "Front desk" role that is only allowed to invite now actually works that narrowly. The shipped Administrator, Editor and Viewer roles are unchanged, since they already carried the matching checkboxes. The "Read billing" permission for the subscription overview had never been checked at all - any signed-in staff member could read it regardless of role; that is now restricted to the super-administrator, the same circle that could already change the subscription.

    Open the Knowledge Base →
  • Roles appear under their name again instead of their identifier

    Every role picker - Roles in the employee record, the invitation dialog, the staff settings and Staff & Roles - had been showing the technical identifiers "superadmin", "admin", "editor" and "viewer". The names were stored all along; the server simply did not send them. You now read Super Administrator, Administrator, Editor and Viewer again. Second, those four names now follow your display language: in German they read "Super-Administrator", "Administrator", "Redakteur" and "Betrachter". A role you created yourself keeps the name you gave it - that one is never translated, and a role with no name at all still shows its identifier rather than an empty line. The same change puts the role lists back in their intended order: by rank, from the super administrator downwards.

    Open the Knowledge Base →
  • Salaries, bank accounts and the audit trail are now reserved for the super-administrator

    Since the day before yesterday the shipped Administrator role reached the sensitive areas - salary and compensation data, salary bands, bank accounts, accounting, cash flow, invoices, revenue figures, billing, privacy requests and the audit trail. The last one decided it: whoever can read and manage the audit trail manages the record of their own actions. Those 30 permissions now sit with the super-administrator alone; they have been taken off the administrator role - in existing workspaces too. The actions that belong to those areas went with them, not just the read permissions: posting and exporting in accounting, bank import and reconciliation, sending invoices and approving compensation. Everything else stays with the administrator - products, orders, CRM, settings, HR outside compensation, approving absences and expenses, refunds, invitations and resetting access. Viewer, editor and super-administrator are unchanged. If somebody below the super-administrator needs these areas, create your own role under Staff & Roles and grant the permissions deliberately; roles you created yourself are untouched by this change, even when they are called "Administrator".

    Open the Knowledge Base →
  • The "Read employees" and "Edit employees" permissions now actually do something

    Under Staff & Roles you could already scope a role to exactly the "Employees" area without also granting the far broader "Read HR"/"Manage HR" permissions - but the server never checked either of the two narrower permissions, so any role built that way was refused on the employee list and on every single employee record. That is fixed: the employee list, the detail view, creating and editing an employee, and terminating or reactivating one all now accept both narrower permissions alongside the existing ones. The shipped roles are unaffected - super-administrator, administrator and editor already carry both, the viewer carries the read permission. Contracts and the compensation history deliberately stay on "Manage HR" - that is a separate, stricter tier.

    Open the Knowledge Base →
  • The invite dialog under "Staff & roles" is a real form now

    You enter an email address there, pick a role and send the invitation off. Until now the send button was just a button next to the fields - the Enter key did nothing, and the address you typed was not checked by the field. Both now behave the way a form is expected to: Enter submits, and an incomplete address is caught in the field itself. This path deliberately gets no extra confirmation - you filled in the fields and deliberately sent them off, and that IS the confirmation. Asking again where it protects nothing only teaches people to click every question away.

    Open the Knowledge Base →
  • The password-reset link no longer carries its secret visibly in the address

    The link in the "forgot password" email is worth as much as your password itself - whoever holds it sets a new one. Until now the secret sat in the query part of the address (behind the question mark) and was written down in places nobody treats as a secret store: the access logs of the servers along the way, and the browser history. It now sits behind a hash sign - a part of an address that browsers never send to a server at all. On top of that, the secret disappears from the address bar once the page has loaded. Nothing changes in how you work, and links already sent stay valid and keep working unchanged until their hour is up. Applies to the admin area and to shop customer accounts alike.

    Open the Knowledge Base →
  • A lock or a deactivation now takes effect in the middle of two-factor sign-in as well

    Entering your password and your second factor in two steps leaves a five-minute window in between. If an account was deactivated inside exactly that window - the "a colleague leaves the company today" case - or if the lockout after several failed attempts kicked in during that time, signing in with the code from the authenticator app or with a recovery code still went through. The account state is now re-checked immediately before the session is issued. What you see: the page now names the real reason - a deactivated account, or a temporary lock together with the number of minutes after which you can try again - instead of blaming the code as it did before. The wording is the same one the password sign-in already uses. And your recovery codes stay untouched: a rejected attempt no longer uses one up, which is what happened before - the codes work only once, and an attempt that could never have succeeded cost you one of them. Signing in with a passkey already checked the account state.

    Open the Knowledge Base →
  • A new workspace now ships with four working roles

    Until now every newly created workspace opened Staff & Roles with no role at all - the list was empty, and inviting somebody as "administrator", "editor" or "viewer" in truth handed over no permission whatsoever: all three were identical in effect, namely ineffective. It went unnoticed for a long time because the owner of a workspace bypasses every permission check anyway. Four roles are now in place: Super-Administrator, Administrator, Editor and Viewer. The cut follows one simple rule - reading sits below writing, writing below managing. Sensitive areas are excepted and start at administrator: salaries and compensation, salary bands, bank accounts, accounting, cash flow, invoices, revenue figures, billing, the audit trail and privacy requests. A viewer sees none of it, not even read-only. Approvals, refunds, payment captures and resetting somebody's access sit with the administrator as well. Existing workspaces lose nothing - the four roles are added, existing roles and their permissions stay untouched, and a role you created yourself that happens to carry one of the four names is left alone. No SELLERLOGIC operator-plane permission is part of any of the four roles.

    Open the Knowledge Base →
  • An invitation no longer fails because the person already works somewhere else on the platform

    Inviting an address that already had a SELLERLOGIC account produced "a user with the e-mail ... already exists. Invitation failed" - even though nobody in your workspace carried that address. A person has exactly one account and can be a member of several workspaces; the invitation nevertheless created a second account every time and ran straight into the uniqueness rule. Now the existing account is linked to your workspace instead. Password, name and the roles in the other workspace stay untouched - your workspace cannot change any of them, and the role the person gets with you is entirely your decision. Second, a failed attempt no longer blocks the address for good: until now it left half a record behind, and every further attempt reported "already exists" against exactly that leftover. A second attempt now recognises it and takes it over - simply invite the person again; nothing has to be cleaned up or deleted by hand. The "already exists" message still appears when the address really does belong to a staff member in your workspace, or when an invitation is still open there.

    Open the Knowledge Base →
  • The last few spots: "workspace" now stands wherever it used to say "tenant"

    The August 20 sweep had missed six individual places that still carried the internal word - the confirmation prompt in the CRM call log, the profile hint about passkeys, the booking languages in appointment settings, the override hint on absence-approval rules, the SDK keys description, and the branding-source label in the email log. All six now say "workspace"; the operator console still says "tenant" as before.

  • The sample address now disappears from existing workspaces too

    Since 20 August no new workspace carries the invented sample address "Musterstraße 1, 33098 Paderborn" with its invented phone number and invented contact address any more. Anyone whose workspace was created before that could still have it on file - and those are the fields that appear in your imprint and in e-mails to your customers. They are now cleared once, so that nothing stands there that you never entered. What you will notice: under Settings → Company details the address, phone number and contact address are empty, and the setup wizard shows its first step "Confirm company details" as open again - please enter your real details there. What stays untouched: everything you maintained yourself. Clearing only happens where street, postcode and town carry the sample values all three at once; a real address in Paderborn is not affected. A contact address or phone number you had already corrected yourself is kept as well. The shop name is never changed.

    Open the Knowledge Base →
  • Two new permissions in the role dialog: "Send invoices" and "Place a call"

    Both actions reach outside the house and could not be separated from the matching edit permission until now - whoever could edit an invoice could also send it, and whoever could set the phone system up could also dial with it. Under Staff & Roles the two now appear as permissions of their own in the Invoices and Telephony groups. Existing roles lose nothing - every role holding the respective edit permission received the new one automatically. What is new is that you can take sending, or dialling, away on its own.

    Open the Knowledge Base →
  • A new workspace no longer starts with somebody else's demo address

    a workspace's settings - shop name, contact address, phone and postal address - are created in two places: when the workspace is created, and when the settings page is opened for the first time. The second place used to insert demo data: a demo shop name, an address in Paderborn and an invented phone number. Which of the two you got depended on which path touched the workspace first - and the contact address is exactly the field that appears in the imprint and in mails to your customers. These fields now stay empty until you fill them in; the setup assistant asks for them in its first step. Two effects you may notice: the step "Confirm company data" no longer counts as done while the details are missing - and where demo data used to stand, nothing stands until you enter something. Details you have already maintained are unchanged.

    Open the Knowledge Base →
  • Data explorer: confirmation before a saved query is deleted

    Under Analytics → Data explorer, the bin icon on a saved query used to delete it on the first click. A confirmation naming the query now appears first.

    Open the Knowledge Base →
  • Field captions in settings are now linked to their field

    In the settings overview and under currencies, metafields, legal & compliance, staff & roles (IAM), reports, accessibility and on the operator console sign-in page, the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "Currency code, edit box". 43 captions now carry that link. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. Three places sound different, all under staff & roles (IAM): above a role's colour swatches, above a role's permission list and above the action picker of an override rule, the caption does not sit over a single field but over a group of several controls. A screen reader now announces a group with that name.

    Open the Knowledge Base →
  • Field captions in the settings are now linked to their field

    Across the analytics pages (custom dashboards, data explorer, data warehouse, report scheduler), the bounce dashboard, the SDK keys and the LLM providers the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "Subject, edit box". That link is now in place. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. Some places sound different: there the caption does not sit above a single input but above a group of several controls - a dashboard widget's type, data source, date range, colour and position, a scheduled report's frequency, recipients and format, the one-time reveal of an SDK key together with its buttons, and the provider type of an LLM connection. A screen reader now announces a group with that name.

    Open the Knowledge Base →
  • The admin interface no longer asks the browser for a display language

    Dates and amounts in the admin interface were produced by helpers whose last fallback was the browser's language setting. With no stored preference - a freshly set-up browser, cleared storage, a private window - the browser decided the format. Anyone using the interface in German on an English-configured machine therefore saw English dates inside a German interface. With no stored preference the application's own default language now applies. An explicitly chosen language works exactly as before.

  • The help link in the setup assistant leads to the handbook again

    the link Help on the setup assistant pointed at an address the knowledge base cannot have, and answered every click with "there is no page on this topic yet". The page was written - it merely sat in the Platform area, which is the operator console and is never delivered into a tenant's knowledge base. The page now lives under Settings, where the assistant itself is found, and the link works. As a side effect the handbook is now also reachable from the help button of the Setup page itself.

    Open the Knowledge Base →
  • The interface now says “workspace” instead of “tenant”

    Across settings, the email log, absences, tasks, languages and the signing settings the same thing went by three different names - “tenant”, “Mandant” and “Arbeitsbereich”, and on the Domain settings page all three appeared side by side. The setup wizard has always said “your workspace”; the rest of the customer interface now follows it. The caption above the slug, for instance, reads “Workspace slug” rather than “TENANT SLUG”. The operator console keeps “tenant” as internal vocabulary, and in HR “Arbeitsbereich” still means a department.

  • The metafield input caption is now linked to its field

    The caption of a metafield was not technically linked to the input below it. Clicking it did not put the cursor in the field, and a screen reader announced the field without a name. Because a metafield can consist of several controls depending on its type - value and unit for a measurement, or amount and currency for money - the caption is now announced as a group with that name. Nothing changes visually.

    Open the Knowledge Base →
  • The signing day on a document, the registration day of a tenant and the day axes of the operator lists no longer convert to world time

    the visible value of the date signed field on a document, the registration day of a newly created tenant, the reference day of the daily workload in booking, the day axis of the delivery statistics and the date columns of the operator's compliance and revenue lists used to be cut out of world time (UTC). Between midnight and 02:00 German time that was the previous day - so signing at 01:00 put yesterday onto a legally binding document, contradicting the ceremony's own audit trail. All of these now come from the tenant's time zone (Settings > Time zone); on the operator level, where there is no tenant, from the declared zone of the operator console. In addition, three places in booking lost a trick that used a language to obtain a date format - the zone was always chosen correctly there, and the results do not change. Titles of internal AI notes, export file names and the handbook's lastmod values deliberately stay in world time. Nothing is rewritten retroactively.

    Open the Knowledge Base →
  • Analytics moved to the shared controls (technical)

    Across the analytics pages - custom dashboards, data explorer, data warehouse and report scheduler - buttons as well as input, select and text fields now come from the interface's shared building blocks instead of per-page code. Look and behaviour stay the same; what becomes consistent is keyboard focus, contrast in dark appearance and the behaviour of disabled fields. Icon-only buttons additionally carry a screen-reader label throughout.

    Open the Knowledge Base →
  • Feedback after saving is visible again

    In several areas of the admin, saving, deleting or importing produced no feedback at all - no green confirmation, no red error. Affected areas included absences and absence planning, holiday calendars, cost centres, locations and legal entities, expenses, payroll runs and reports, customer segments, metafields, redirects, email templates and the CRM lifecycle settings. The actions themselves completed correctly; only the message was missing, which was indistinguishable from "nothing happened". The cause was a second notification mechanism running in the background that was never displayed; it has been removed and every area now uses the same one. As a side effect, a technical policy violation that appeared in the browser console on every page load is gone too.

  • No registration is offered on the company network any more

    On the internal address the sign-in card carried "No account yet? Register now" at its foot. The hint led nowhere there: that address is reachable only inside the SELLERLOGIC network, and anyone wanting to register cannot call it up at all. On the public address the hint stays unchanged.

    Open the Knowledge Base →
  • The invitation link no longer reveals the full work e-mail address - and can no longer be probed in bulk

    The page on which a newly invited person sets their password used to show first name, last name and the full e-mail address as soon as a valid invitation link was opened. Anyone who got hold of the link - through a forwarded mail or a shared screen, say - read the full work address along with it. The address is now shown shortened only (first and last letter of the part before the @ sign only): enough to reassure you that this is your account, too little to write down. In addition, the invitation path now has its own abuse brake: anyone trying invalid links in series is turned away for 15 minutes after ten failed attempts. Genuine invitations are unaffected - even when many new colleagues open their link at the same time from the same company network, because only rejected links are counted. If the brake does trigger, the page says so explicitly and points out that your invitation link is still valid.

    Open the Knowledge Base →
  • The operator console sign-in now opens light when you arrive from a light surface

    The console sign-in always opened dark, even if you had just been working with a light appearance. The cause was not the setting itself but its reach: the chosen appearance is stored per address, and on the company network (admin.scs.sl.local) the choice made on the public address simply is not present - "nothing stored" fell through to the surface's dark default there. Sign-in and registration pages now open light consistently unless you explicitly chose dark; the console sign-in thus follows the same rule as your company sign-in. After signing in your setting applies unchanged.

    Open the Knowledge Base →
  • Unique page titles

    Several help pages carried exactly the same name as a page of the same name in another area, which made them impossible to tell apart in search results and listings. Affected in this area: Activity Log (Settings) and Reports (Settings). The page addresses do not change, so saved links and bookmarks keep working.

  • An incomplete backup now reports itself as failed instead of completed

    If an expected table could not be read while a backup was being created, the file was stored anyway and the run was listed as Completed; the problem was only mentioned in the technical log. A file that silently misses something looks like a backup - and you only find out when you restore it, which is the worst possible moment. From now on such a run ends as Failed, names the affected table in plain language and stores no file at all. Normally nothing changes for you; if you see a failed run, please start it again once the stated cause is fixed.

    Open the Knowledge Base →
  • Restoring accounts and passkeys actually works now

    When restoring a backup, the restore aborted at the first table containing a list or settings field - in the users-and-permissions area that meant right at the user account (permissions, preferences, recovery codes) and at the passkey. Both the tenant and the platform part were affected. This only came to light when restoring against a real database. Fixed - accounts, roles, permission exceptions and passkeys come back in full.

    Open the Knowledge Base →
  • Sign-in now opens light instead of dark

    The sign-in page used to inherit the admin interface's dark default - most noticeable when a visitor arrived from the light homepage and had never chosen a dark appearance themselves. From now on sign-in defaults to light, even when the browser has no stored choice yet, or has "System" stored while the device is set to dark. Anyone who explicitly chose dark - via the switch on the page itself or on one of the other surfaces - still sees dark; that choice continues to apply to registration, sign-in and the admin interface together. Nothing changes for the signed-in admin interface, which stays dark by default.

    Open the Knowledge Base →
  • Signing in on the general address now leads to your own company, not the operator console

    Opening https://admin.scs.sellerlogic.com without an account name used to redirect unconditionally to the operator console - a company account could never sign in there in the first place. The page now explains that sign-in happens at your own address, asks for your account name, and shows the resolved address as a link as soon as you type it. The path to the operator console remains available as a separate link for SELLERLOGIC employees. Second, the sign-in form now names the reason for a failure instead of always showing "Login failed": "Service unreachable" and "Workspace not ready yet" appear as their own messages - wrong credentials deliberately stay unspecific.

    Open the Knowledge Base →
  • CRM settings: integration card and lifecycle stage now reliably keyboard-operable

    An integration card under Settings → CRM → Integrations already looked focusable but didn't actually respond to Enter or Space - keyboard operability was only apparent, not real. That's fixed. A stage row under Settings → CRM → Lifecycle can now also be reached with the Tab key and selected with Enter or Space.

  • Staff card now reachable without a mouse

    Under Staff & Access, a staff member's card could previously only be opened with a mouse click to edit their details. Fixed: the card can now be reached with the Tab key and opened with Enter or the Space bar.

    Open the Knowledge Base →
  • Backups now include roles, permission exceptions and passkeys

    A backup used to carry the user accounts, but not the roles, the role assignments, the individual permission exceptions, the passkeys (password-free sign-in), the password history or the session overview. On restore the accounts were back - but without any permissions and without a registered sign-in method; the backup file looked complete all the same. Fixed: the "Tables" selection now offers the complete users-and-permissions area, the export carries it, and the restore replays it in the correct order - the role first, then its assignments - so a restored staff member has the same roles and the same passkeys as before the backup. If you pick individual tables, the interface warns about missing dependencies as usual (for example "role assignments without roles"). This does not apply retroactively: files created before this change do not contain that information - if you need a dependable backup, please create a new one.

    Open the Knowledge Base →
  • The cookie notice actually appears now - and the decision controls Google in full

    The cookie notice was fully built but was never mounted anywhere in the shop. No visitor ever saw it, nobody could consent, and so the analytics feature we offer was simply unusable for your shop. The notice is now mounted and appears on a first visit according to your configuration. Three further changes come with it: First, the decision now controls all four Google signals instead of analytics alone - the Analytics category switches measurement, the Marketing category the three advertising signals. Anyone who consents to analytics only is measured but not evaluated for advertising. Second, every later change takes effect immediately, with no page reload; after the decision a "Cookie settings" button stays permanently in the bottom left, so your visitors can withdraw as easily as they consented. Third, nothing is loaded before consent - as long as nobody has decided, the Google script does not exist in the browser at all. For visitors who had decided about analytics before, their earlier decision continues to apply unchanged; explicitly for analytics only - marketing stays rejected until they select it themselves. Note on the "Default behavior" setting: the "Opt-out" value no longer has any effect. Optional categories are never pre-ticked in the notice, because a pre-ticked box is not valid consent; your shop always behaves like "opt-in".

    Open the Knowledge Base →
  • The "handbook" is now the "Knowledge Base" - and the public version looks like the one in the portal

    The collection of all guides is now called the Knowledge Base everywhere - in the portal under Help, in the command palette, in the contextual help panels and in the freely accessible version at docs.scs.sellerlogic.com. That public version now carries the same header as our main site - same logo, same controls, same light and dark appearance, same browser icon - with the search centred in the header, a drop-down covering every area, and the way back to the main site via the logo. Home page, area pages and release notes follow the portal's structure: area tiles with a description and a page count, the three newest updates as cards, and the release notes themselves grouped by month and product. The search behaves the same way too: same weighting, same typo tolerance, same result presentation with the match highlighted, and Enter jumps to the first result. Your addresses and bookmarks stay valid.

    Open the Knowledge Base →
  • Individual permission exceptions for single users now actually take effect

    Under "Staff & Roles" you can grant a single user an additional permission or explicitly revoke one, independent of their role. Until now these exceptions were saved and displayed but ignored at sign-in - a revoked permission remained usable, an additionally granted one never arrived. This is fixed: exceptions now take effect no later than the affected user's next sign-in. Exceptions recorded earlier are kept and apply from now on - so please review once whether the stored exceptions still match your current intent.

    Open the Knowledge Base →
  • Permission changes and signing out now take effect immediately, not after up to 15 minutes

    When you withdraw a role or permission from a user under "Staff & Roles", change an individual override, or deactivate their account, the old permission set previously remained in force for up to 15 minutes - for as long as the affected user's running session stayed technically valid. This is fixed: the change applies from the affected user's very next action; a deactivated account is signed out immediately. Signing out itself is now complete as well - after "Sign out" the session is ended everywhere, even if the browser window was still open. Users whose access remains valid notice nothing and keep working without interruption.

    Open the Knowledge Base →
  • Recovery codes only count as a second way once you have confirmed you stored them

    Since 4 August the platform console has required a second way in before a passkey becomes mandatory - existing recovery codes were enough to satisfy that. There was a gap in it: you get to see the codes in plain text exactly once, after which we only hold them encrypted. Anyone who generated them and closed the window without writing them down ended up with ten rows in our database and still no usable way back into their account - the safeguard was met on paper and not in reality. From now on a set only counts as a second way once you have explicitly confirmed that you stored it outside the system. Existing codes stay valid and there is nothing to catch up on; the confirmation is only requested the next time you generate a set.

    Open the Knowledge Base →
  • The English interface in Settings speaks English

    On the page for setting up a Google mailbox and in the CRM connections overview, labels such as "E-Mail-Aliase", "Primär" and "Standard", the loading hint, the note about missing aliases and the buttons for adding and removing a category all stayed in German. They are now maintained in both languages.

    Open the Knowledge Base →
  • A passkey only becomes mandatory once a second way in is secured

    Creating a passkey for the platform console used to make it the only way in immediately. If that single passkey was lost or no longer matched the address, the account was locked out - and the page for creating a new passkey sat behind that very prompt. That is exactly what happened on 4 August. From now on, before passkey enforcement takes effect the account must already have either another passkey or valid recovery codes. If neither exists, the system declines the setup with a note asking you to create recovery codes first and keep them outside the system.

    Open the Knowledge Base →
  • An enrolled passkey ends the setup prompt

    Anyone who followed the "MFA setup required" prompt and added a passkey was still sent back to the same page after every sign-in - and saw the notice sitting above the list of passkeys they already had. Only an authenticator app counted as set up, not the passkey the prompt itself asked for. Both count now: after your first passkey, the notice and the redirect are gone.

    Open the Knowledge Base →
  • An existing passkey now counts as set up everywhere

    Anyone signing in through an address other than the one their passkey was created under was sent back to set up two-factor confirmation - even though one had long been in place. Being told to set up something that already exists is a dead end. From now on a passkey on any of your sign-in addresses means "set up". Instead of the prompt you see a note in your profile telling you which address your passkey applies to and how to add one for the address you are on.

    Open the Knowledge Base →
  • Long option lists now come with a search field

    Select fields with many entries - language and time zone under "Profile > Regional settings" above all - used to make you scroll the whole list; for time zones that is around 400 rows. Those fields now open as a list with a search box on top: type "Berlin", "Europe" or even the technical identifier "Europe/Berlin" and the list filters along. Everything stays fully keyboard-operable (arrow keys, Enter, Escape). Also switched over: the business-hours time zone in the service area, the language picker in the API documentation and the test area, and the two font fields under "Design". Short option lists with a few fixed choices are unchanged.

    Open the Knowledge Base →
  • Notifications show up instantly again, including on your public address

    New notifications only appeared in the admin area when the list refreshed on its own - depending on the timing, with a noticeable delay. The cause was a missing live connection on the public address {your-slug}.admin.scs.sellerlogic.com; inside the company network it had been working all along. That connection is now set up for both addresses. There is nothing for you to do and nothing gets lost: whenever the live connection is unavailable, notifications keep refreshing on a regular interval as before.

    Open the Knowledge Base →
  • Only the newest password reset link stays valid

    Clicking "Forgot password" several times left several valid links in your inbox at once - up to five, each usable for an hour. An older, forwarded or archived e-mail therefore stayed live long after a new one had been requested. Every new request now immediately voids all links sent before it. Only one thing changes for you: always use the e-mail that arrived last. If you open an older link by mistake, you will see a notice that it is no longer valid and can simply request a new one. This applies to the admin area and to customer accounts in the shop alike.

    Open the Knowledge Base →
  • Passkeys from before the changeover are offered again - and when they are not, we say why

    A passkey remembers the address it was created under. Since the changeover at the beginning of August, sign-in always asked for the new, shorter address; passkeys from before that did not match and were never even offered by the browser - it looked as if they had vanished. We now record which address each passkey belongs to and ask for exactly that one. And if your passkey belongs to an entirely different address - the company-network one, say - the message now states that explicitly, including the address, instead of failing without comment. Technically a passkey only ever applies to one address; for a second address add another one under "Profile".

  • Recovery code now offered during platform console confirmation too

    When switching into the platform console asks you to confirm with a passkey, that screen now also offers the recovery code field. Until now it appeared only after a full sign-in with e-mail and password - so anyone without a passkey at hand saw no second route at all at that point.

    Open the Knowledge Base →
  • Recovery codes are finally shown, and stay available

    Under "Profile", the "Two-Factor Authentication" section only offered "Generate new codes" - and clicking it visibly did nothing. The codes were created but never displayed, and any error stayed silent. That made the second route into your account worthless, because nobody could save it. The codes now appear right after they are created, with a copy button, and the new "Show codes" route brings back every still-valid code at any time. To protect them, both routes ask for your password, and every retrieval is logged.

    Open the Knowledge Base →
  • Recovery codes work without an authenticator app too

    Anyone working with a passkey only could create recovery codes but not redeem them when signing in - they were rejected with a message saying no two-factor confirmation was set up. Those are exactly the accounts that need the codes most. A code is now accepted from every account that has codes on file.

    Open the Knowledge Base →
  • Staff tiles, user list and account menu without initials circles

    The colored initials circle has been removed from the staff tiles under Settings and from the list under "Users & roles". The account menu in the top right now opens via a neutral user icon instead of the initials - the click target is unchanged.

    Open the Knowledge Base →
  • The platform console no longer throws you out of your own area

    Accounts with access to the platform console were pushed to the console's passkey sign-in within seconds of signing in - from any page at all, including the very page where the second factor was meant to be set up. The cause was the console's background queries, which run quietly behind every page. They now rest for as long as the console asks for a passkey sign-in, and only a deliberate click still leads there. Your own area is fully usable again - it never requires a platform passkey in the first place.

    Open the Knowledge Base →
  • Internal storage-key rename completed

    After the platform was renamed to SELLERLOGIC Commerce Services, around 30 technical browser storage keys (for session, cart, cookie consent, language and wishlist) were still running under the old name in the background. They have now been switched to the new name, with automatic adoption on first load - you won't notice anything, and nobody loses their session, cart or cookie consent.

  • Links in our emails point to your public address again

    Automated emails - the password reset mail above all - recently carried an internal company address. Anyone clicking it from outside our corporate network reached nothing at all. This affected addresses stored before the rename, as well as every account that had entered nothing of its own under "Domains & URLs". Both are fixed: stored legacy addresses were switched over to your public address once, and an empty field now automatically resolves to https://{your-slug}.admin.scs.sellerlogic.com and https://{your-slug}.scs.sellerlogic.com. A custom address you entered yourself stays exactly as it is.

    Open the Knowledge Base →
  • One consistent height for searchable select fields

    Select fields you can type into - country, currency, or the employee picker in absence management, for example - were taller than the buttons and fields next to them. They now follow the same measure as every other control in a toolbar. Handling and function are unchanged.

  • Passkeys from before the end of July need to be created once more

    When our address changed at the end of July 2026, passkeys created before that lost their validity - they are no longer offered to you when signing in. If this affects you, sign in once with your password and a recovery code, then create a new passkey in your profile. That is a one-off. If your recovery codes are missing too, please contact a colleague with administrator rights.

    Open the Knowledge Base →
  • Passkeys now survive a change to your account address

    A passkey remembers the address it was created under. Until now that was your full sign-in address including the account name - so whenever an account was renamed or our address changed, every passkey stopped working at once. Newly created passkeys bind to the sign-in address as a whole and therefore stay valid across a rename. Existing passkeys keep working unchanged; you do not need to do anything.

    Open the Knowledge Base →
  • Social sign-in on the storefront fixed

    After signing in via a social network (for example Google), the session used to be saved under a key the application never read. This meant customers were silently signed out again after reloading the page. Sign-in now persists as expected.

  • The new name now also appears in your shop, in e-mails and in the passkey dialog

    After the platform was renamed to SELLERLOGIC Commerce Services, the new name had not reached every corner yet. Now updated: your shop's header and footer including the wording in all 43 languages, the footer and subject lines of automatic e-mails, and the name your browser shows when you create a passkey. Nothing changes in substance - your data, settings and addresses stay as they are.

  • The password reset link no longer sends you to the sign-in page

    Following the link from the email took you to the sign-in page and asked you to sign in first - precisely what a forgotten password makes impossible. The link now opens the page for setting a new password directly. The same applies to the other pages that must be reachable without signing in (sign-in, sign-up, invitation/onboarding).

Shop

  • API documentation: the "Sandbox" tab no longer fakes a request (#1663)

    The tab used to show a made-up sample response and report "request sent successfully" - even though no connection was ever made, no matter what address was entered. It now links directly to the real, code-generated interactive reference (/api/docs) instead, which sends actual requests with your own credentials. The base URL shown now reflects your real API address instead of a fixed example, and the rate-limit table on the "Auth" tab lists the values actually enforced (100/600/60 requests per minute depending on the surface) instead of invented pricing tiers.

    Open the Knowledge Base →
  • GDPR erasure now covers wishlists and reviews too, marketplace erasure names what stays

    An erasure under Article 17 GDPR used to skip two record classes: the person's wishlists remained untouched, and their product reviews still carried their name and customer reference. An erasure now removes the wishlists entirely and, for reviews, replaces only the author information - the rating and text stay visible to other shoppers, the same as an anonymously submitted review. The erasure receipt now reports both counts. Erasure in the marketplace customer account used to answer with a bare success flag; it now names the retained orders with their legal basis and retention period, matching what the shop customer account already does. The billing address inside a retained order itself is unchanged by this erasure - it stays part of the commercial document.

  • Order list: switching pages now actually shows different orders (#1662)

    Paging to page 2 (or any later page) used to show the same first page again - the admin queried the interface with limit/offset, but the interface expects page/pageSize and silently dropped the unknown fields with no error. Paging now genuinely works. Two other limitations measured in the same pass are unchanged and were already documented on this help page: search still only matches order numbers (not customer name or email), and "Refund" still does not trigger an actual repayment with the payment provider.

    Open the Knowledge Base →
  • Reviews and recommendations show the product name again (#1993)

    The review list

  • The "Google Reviews" App Store listing now describes only real features

    The listing used to advertise a "configurable sync interval" (hourly or daily), an "automatic import" of Google reviews, and a "social proof widget for the storefront" - none of which exist: there is no schedule, no interval setting, and no review widget in the shop. Since #1813's fix, clicking "Sync" already answers honestly with "not available" instead of inventing reviews. The description, short text and highlights now name only what the app actually does: view a review list, filter it by minimum star rating, and delete individual entries. No action is needed on your part.

  • Dropdowns across the shop and the storefront are now read out by name (#2859)

    Affected were the product list, reviews and Google reviews, blog and content pages, menus, promotion combination settings, the app area, the rule builder with its field, operator and value, and the bounce overview. In the storefront the sort order on the brand page and in the product list, plus the return reason, are included. Anyone using them with a screen reader heard nothing but "combo box" there - with no hint of what was being selected. All of them now carry a spoken name in German and English, and in all 44 storefront languages. Nothing changes visually. Products · Promotions ·

    Open the Knowledge Base →
  • Your shop pages now stay in one language throughout, even with simultaneous visitors

    When a German-speaking and an English-speaking visitor opened your shop at the same moment, one of the two pages could be delivered in mixed languages. Header and footer were right, but the blocks in between were not: a German visitor might see "Your email address" and "Subscribe" in the newsletter block while the rest of the page was German. The fault depended purely on the chance of simultaneity - the same page was fine again seconds later, which made it hard to pin down, and it happened more often the more visitors were browsing your shop at once. The cause was that all pages being delivered at the same time shared a single language setting: the most recent request overwrote the language of every page still being built. Each page now carries its own language, for all of its blocks, and what other visitors do at the same time no longer affects it. Affected were all sections of a page as well as the entries in the page head; header and footer were already correct. Nothing changes about your own texts and settings.

  • Nine templates promised something no shop had agreed to

    As shipped, their announcement bar above the header carried promises such as "Free shipping on orders over €50!", "Free returns on all orders!" or "Spring Sale - 20% off all seeds!". Those bars have been removed with nothing put in their place. If you want to show an announcement, enter it in the editor in your own words.

  • Product pages stay reachable even when something is missing in the workspace

    In an incompletely set up workspace, a product page in the shop could answer with a server error although only an extra was missing - images, variants, translations, brand, keywords or the frequently asked questions. The shop had planned for that case but never recognised it: the check looked at the wording of the error message, and the database layer does not put that wording there at all. The case is now recognised by the database error code. The product page still appears, the missing extra simply stays empty, and the failure is recorded as an open incident for operations so that somebody fixes it instead of overlooking it. Every other database error still leads to a clear error message: a real failure is not quietly turned into an empty list.

  • Templates that are already active are carried along

    Shops that activated a template before this change carry the English copy in their stored page data. It is cleaned up automatically at the next service start, with nothing for you to do. Your own text set in the editor is left untouched - only the part taken over from the template is cleaned up.

  • The cart accepts articles again, and the currency switch tells the truth (#2814)

    Putting an article into the cart failed - the shop answered with a server error instead of creating the line. The same path was affected when raising a quantity and when checking a filled cart before checkout, so the purchase path ended before the checkout. The cause was a query that read two product fields the database never had. It now reads the ones that exist: whether an article may be sold is still decided by its active switch, and the line label comes from the maintained product name of the respective language. A deactivated article is still refused. On top of that, switching the cart currency kept reporting the old currency although the new one had already been stored; display and stored state now agree.

    Open the Knowledge Base →
  • The cart now stays visible on a phone in shops without a template

    In shops where no template has been activated yet - the shipping state of a freshly created shop - the header icon row pushed the page past the right edge at 390 px. Measured with a 47-character shop name the page was 825 px wide and the cart button started at 721 px, so anyone shopping on a phone found it only after scrolling sideways. The icon row now stays fully visible, the shop name gives way and is shortened where needed, and the wishlist moves into the menu at phone width, where it already had an entry. Cart, search and language stay in the header. Nothing changes from 768 px upwards.

  • The Google Shopping product feed can be fetched again (#2841)

    Generating the feed, downloading it and the public feed address that Google Merchant Center fetches all ended in a server error instead of the feed - in every workspace, which left the feed permanently empty for Google. The cause was a query reading an article's readable link segment from a field the database never had. It now reads it from the same maintained translation row it already took the name and the description from, in the language configured on the feed. An article without a maintained translation falls back to its identifier, so its link stays valid instead of being empty.

    Open the Knowledge Base →
  • The newsletter block in the footer now speaks the language of the shop

    In shops with an active template, four texts in the footer were fixed to English: the heading of the newsletter block, the line below it, the hint inside the input field and the button. They stayed English even after the visitor picked another language in the header, because they never passed through the translation at all. All four now come from the translation and change with the language; they are filled in for all 44 shop languages. As the footer sits on every shop page but the home page, this affected nearly the whole shop. The wording shifts slightly: "Newsletter" is replaced by the heading the shop already uses for its newsletter elsewhere.

  • The section preview now follows your language, not that of your last shop visitor

    In the template editor, a section's sample texts did not appear in the language of your admin, but in the language your shop had last served a page in. As long as nobody was browsing the shop, a German-language account saw German and everything looked right. But once an English-speaking visitor had opened a page, your preview went back to showing "Your email address" and "Subscribe" instead of "Ihre E-Mail-Adresse" and "Abonnieren" - without you changing anything, and with no visible cause. Affected were the placeholder texts of the newsletter block and the product count on category lists and category tiles ("12 products" instead of "12 Produkte"). The preview now answers every request on its own: it takes the language you set for your admin, and what happens in your shop at the same time no longer affects it. Your own texts are untouched by this - only the sample texts a section brings along while you have not entered your own are translated.

  • The shipped page templates no longer force a language

    All 31 templates in the template store wrote their visible copy into the shop in English the moment a template was activated - headings such as "Trending Now", "Our Story" or "You May Also Like", plus subheadings and button labels, 332 places in total. Because that copy sat in the layout as a value of its own, it beat the translated default of the sections, and a German-language shop stayed English even after switching languages. That copy has now been removed from the shipment: the sections show the translated default until you enter your own text in the editor. What makes a template a template is unchanged - the order and choice of sections, column counts, heights, image placement, colors and fonts. The same applies to the 27 default values of the section templates in the page editor: text fields now start empty instead of with an English suggestion.

  • The shop header now fits a phone, and the cart has a name again

    On screens 390px wide, shops with an active template had two rows reaching past the right edge, which let the page be scrolled sideways: the icon bar in the header and the newsletter row in the footer. The icon bar now stays fully visible while the shop name gives way, and the wishlist icon moves into the menu on phone widths, where it already had an entry; the newsletter field may shrink and takes the full width on narrow screens. On top of that, all six header icons - search, wishlist, account, cart, language and menu - now carry a spoken name, so a screen reader can find and operate them.

  • The template previews now speak your language, and promise nothing

    In the template store, the live preview of every template carried an announcement bar reading "Free shipping on orders over $50". No operator ever made that shipping promise, and it named a foreign currency; the bar has been removed outright. So have the four invented tile labels "Free Shipping", "Secure", "24/7 Support" and "Returns" shown for an icon row without texts of its own - empty placeholders now stand there until you enter your own points. Everything else in the preview - header, menu entries, "Add to cart", "Shop now", "Subscribe", footer and copyright line - now appears in the language of your admin instead of fixed English, and the copyright line names the current year instead of 2024. In the section preview of the template editor, the newsletter block showed a fixed "Your email address" and "Subscribe" even in a German-language account; both now follow your language setting. The note below the field read "We respect your privacy. Unsubscribe at any time." - a statement about how customer data is handled that nobody asked you about. It has been cut back to the factual half: "You can unsubscribe at any time." The same blocks are also delivered in the shop itself, where category lists and category tiles used to count "12 products" instead of "12 Produkte".

  • The template sections now speak the visitor's language

    Twelve sections of the page editor - hero, announcement bar, call to action, newsletter, featured products, product grid, product carousel, collections, categories, image with text, testimonials and gallery - showed their default copy in fixed English whenever no heading of your own was set in the editor. A German-language shop therefore greeted its visitors with "Welcome to Our Store", and the language switch in the header made no difference. That copy now goes through the translation layer and exists in German and English; the same applies to the spoken names of the carousel arrows and the dismiss cross, and to the product count under a category. Two of those defaults lost a statement no shop had ever made: the announcement bar promised "Free shipping on orders over $50!" out of the box and now names neither an amount nor a currency, and the image-with-text section claimed sustainable materials and ethical processes. Replaced as well are the three invented customer testimonials with star ratings that the testimonials section showed when no entries of your own existed: it now shows a placeholder that reads as one, and no rating. Anyone who entered their own copy in the editor keeps seeing it unchanged.

  • Your shop's homepage shows your own header and footer again - including the cart

    The homepage (/) always displayed the platform's marketing bar, no matter whether you had activated a template or built your own homepage in the page editor. That bar carries no cart, so the path to purchase broke on the very first page; on top of that it showed the logo, navigation and advertising copy of SELLERLOGIC SCS instead of yours. The cause was a built-in sample page that the system mistook for a homepage maintained by you. From now on: if you have built a homepage in the page editor with sections and content blocks, exactly that page is shown - which did not work before either, because the sample page covered it. Otherwise the header and footer of your active template appear, and the cart is reachable from the homepage. Nothing needs to be changed on your side.

  • Your shop's buttons and input fields now follow your theme throughout

    Until now the shop's controls took their look from a style sheet of the shop's own, separate from the building blocks the other surfaces are made of. At 99 call sites the building block had to be switched off and redrawn by hand - every one of them could drift away from your theme on its own without anyone noticing. Primary color, border color, corner radius, font weight, text transform and the focus ring now come from one shared value layer that your theme fills in at runtime: a primary button carries your color, a secondary one additionally carries your border color, and every input field in sign-in, account, checkout, newsletter and returns carries your border, your corner radius and your color when focused. If you have not set a value of your own, your design preset's value still applies. The only visible change is the height of the controls: they now follow one shared scale of 44 and 36 pixels instead of a height derived from their content.

    Open the Knowledge Base →
  • "Cancel" in the order detail view now asks first - and names the order number

    The button in the order header used to cancel the order on the first click. That is final: there is no way back out of the "cancelled" state, and the status change goes out as an order.cancelled event to the webhook addresses you configured and to marketing automation, so it can trigger a message to the customer. A prompt now appears before it fires, naming the order number and the receiving party; cancelling the prompt cancels nothing. The same applies to the second route into a cancellation, the status selector under "Manual status override" - only the "Cancelled" entry is diverted there, the other status changes run unprompted as before. In addition, the server now rejects a cancellation that arrives without a confirmation, even when it does not come from the interface.

  • Customers can now have their account erased themselves (#2436)

    Until now your customers could request a data export from their account but could not request an erasure - exactly the half that Article 17 GDPR requires was missing. Under Account › Settings › My data both now sit side by side: download data export, and erase the account for good, the latter behind an explicit confirmation. The erasure reaches through: addresses, consent history, marketing confirmations, internal notes and attributes are removed, and the customer profile is irreversibly anonymized - including the search key derived from the e-mail address, so the customer can no longer be found by their own address either. Orders stay attributable and the audit trail stays traceable, but loses the erased person's IP address, browser identifier and search parameters. After the erasure your shop tells the customer explicitly what is retained and for how long: orders and invoices for ten years under section 147 AO and section 257 HGB, the audit trail for twelve months.

    Open the Knowledge Base →
  • E-mails now show injected markup as text (#2458)

    Values that SCS puts into an e-mail - customer name, address, order number, free text from a form - used to be carried into the message unchanged. If such a value contained HTML markup, it acted like the template's own markup in the recipient's inbox. From now on that markup appears as visible text; the look of your templates does not change. Where a template outputs markup on purpose - the billing and shipping address in the order confirmation, the file list in the download mail - it is preserved unchanged. Existing tenants are converted automatically at the next service start, nothing to do.

    Open the Knowledge Base →
  • Payment methods in checkout are shown completely and correctly again (#2356)

    The list of available payment methods is filtered by order value and delivery country. Two parsing faults produced wrong results: a lower-case country code (de instead of DE) matched no method, so country-restricted payment methods were never offered to the customer. And an order value in scientific notation was read as 1 cent, so methods with an amount limit appeared when they should not. Both are fixed, and an unreadable order value is now rejected instead of silently switching the amount filter off.

    Open the Knowledge Base →
  • Security: customer addresses are now fully encrypted (#1875)

    On a customer address, the name, street and phone number were already stored encrypted, while postcode, city, additional line, company and region were kept in plain text. Postcode and city together identify a person just as much as the name next to them, so from now on all of these are stored encrypted with the same method. Nothing changes in how you work with them: you still see, enter and edit addresses exactly as before, invoices and shipping labels are produced unchanged, and tax and shipping cost resolution keep working as usual. Addresses already on file are migrated automatically - there is nothing for you to do. The country code deliberately stays unencrypted: on its own it is not personal data, and it is needed for tax and shipping resolution.

    Open the Knowledge Base →
  • Security: your customers' VAT ID is now stored encrypted (#1878)

    A customer account's VAT ID used to be stored in plain text. For sole traders and self-employed people it is personal data, so from now on it is stored encrypted with the same method already used for the email address and for the tax number in the company area. Nothing changes in how you work with it: you still see, enter and edit the number exactly as before, verification against the EU VIES system is unchanged, and it appears on the invoice as usual. Numbers already on file are migrated automatically - there is nothing for you to do.

    Open the Knowledge Base →
  • Shop pages now reject nonsensical addresses cleanly

    Following yesterday's fix to the three affected shop pages, every other publicly reachable shop address has now been brought in line - product, category, blog, content and legal pages, the cart, the checkout, reviews, menus, currencies, languages and the action links from ticket emails. Until now a value in the address bar that obviously cannot be one - a 400-character product key, say - could travel all the way to the database and cause a server error there. It is now rejected beforehand. What you will notice: a link with a nonsensical key still shows the familiar "not found" page rather than an error message, and an incomplete action link from a ticket email still shows the friendly note that the link is incomplete. Nothing changes for valid addresses. Also fixed: requesting a single language could return a response that was not a language at all, via a technical special term.

  • Smart collections no longer hand out their rules (#2463)

    A smart collection assembles itself from a filter rule, such as "every item from this manufacturer over 50 euros". Until now the storefront interface gave that rule to anyone who asked, with no login required - along with the collections you had not published yet. That made your curation criteria, and what you were planning next, readable from the outside. It is closed: the storefront path now returns published collections only, and of those only what a display needs - name, description and item count. The filter rule and your own extension fields stay in the admin area. Nothing changes for your shop: resolving a collection into items and showing them works exactly as before, and now returns active items only, in line with every other part of the shop. In the admin area you still see everything, including the filter rule and the collections that are not published yet.

  • The "Paragraph" block now filters embedded HTML as strictly as every other block (#1871)

    If you paste your own HTML into a Paragraph in the page editor, you were protected less well than in any other text block: the paragraph did strip scripts and event attributes, but it left links with javascript: and data: addresses, embedded <svg> graphics and <style> blocks in place. Those leftovers are enough to run someone else's code in a visitor's browser - and the paragraph is shown in the shop to everyone, signed in or not. The block now uses the same filter as Text, HTML, Image with text and Accordion. Ordinary content is unaffected. If you deliberately placed your own formatting via <style> or a graphic via <svg> inside a paragraph, it will no longer appear; set the formatting through your shop's design instead, and place graphics with the Image block.

    Open the Knowledge Base →
  • The sitemap shows categories and blog articles again (#1082)

    Your shop's automatically generated sitemap.xml previously broke on the category section, so search engines received no sitemap at all - and blog articles were silently missing entirely. Both are fixed: category and blog pages now appear reliably in the sitemap. A single broken section no longer takes down the rest of the sitemap either. Categories ·

    Open the Knowledge Base →
  • Deleting a customer address now asks first (#1916)

    In the customer record (Sales → Customers, then open a customer) the bin icon in the Addresses card removed the address on the first click. It is gone afterwards - including for orders that do not yet carry their own copy of the address. A confirmation now appears first, naming the street, postcode and town of the address concerned. Adding and editing an address are unchanged.

    Open the Knowledge Base →
  • Sales lists now honour the requested number of rows per page (#2350)

    Several lists asked the server for a specific number of rows per page - Redirects under Settings asked for 25, for example - but silently got the server's own default back instead, 20 in the case of redirects. The only sign was a page that was shorter than expected; nothing ever reported it. The server now understands the request and returns exactly as many rows as the page asks for. Besides redirects this affected brands, coupons, promotions, reviews, rules, tags, tax rules, newsletters, blog articles, gift cards, wishlists, abandoned carts and fraud screening. Filters, sorting and page navigation are unchanged.

    Open the Knowledge Base →
  • The shop no longer prints foreign input as code

    Three public shop pages - search, the customer account and the password reset page - copied a value from the address bar into the page unchecked. Anyone who slipped a prepared link to a customer could have foreign program code run inside your shop. That is closed: the shop's page templates now escape every inserted value by default, and the three pages additionally check their input up front - an unknown account tab, an unreadable reset key or an excessively long search term are now refused instead of displayed. Nothing changes for your content: texts from the content system, blog posts, product and category descriptions and text sections in the page builder still appear as formatted text. Only in fields that are explicitly plain text - the caption of an announcement banner, for instance - pasted HTML is now shown as text instead of being interpreted. Email templates are not affected by this change.

  • Category and customer permissions now actually take effect (#2222)

    Under Staff & Roles you could grant the category permissions view and edit and the customer permission delete without the server ever checking them - a role carrying only those still ran into an error, and revoking them locked nothing. The category and customer endpoints now check both spellings that the permission editor and the public API offer. The shipped roles carry both and will notice nothing.

    Open the Knowledge Base →
  • Four buttons in the sales area now ask before they fire

    Delete order note (in the order detail view) removed the note at once - often the only written record of what was agreed with the customer by phone. Send reminder under Sales › Abandoned checkouts mailed a real person with one click, from a row in a list people click through for reading - and stayed clickable even after a reminder had already gone out. On the product, Delete currency price and Delete download removed their entry with no question; with a download, customers who already bought the product lose their file too. All four now open a confirmation window that names the consequence - for the reminder, including the recipient address. "Cancel" means nothing happened. Plain saving stays question-free - writing a note, entering a currency price or uploading a file still goes straight through.

    Open the Knowledge Base →
  • Publishing and unpublishing a content page now ask first

    In the page editor (Sales › Content pages), the "Publish" / "Unpublish" button switched over at once. Both directions change what your visitors see the moment they land: publishing puts the page in front of every visitor of your storefront, unpublishing takes a live page away from anyone holding its link. A confirmation window now appears first, naming the page title and saying which of the two is about to happen. Saving is unchanged - you still store your edits without a question.

    Open the Knowledge Base →
  • Refunds now recognise the "Refund orders" permission (#2222)

    Granting Refund orders under Staff & Roles allowed nothing until now: refunding a payment asked exclusively for Refund payments. Both now open the same action. No existing role loses anything - in the shipped roles both permissions sit with super administrator and administrator anyway.

    Open the Knowledge Base →
  • Review moderation, product streams and custom product fields now demand a permission

    Until now anyone who was logged in could approve, reject, answer or delete any review and create, change or remove product streams and custom product fields - regardless of the permissions their role carried. The server now checks: moderating reviews requires Moderate reviews, product streams and custom product fields require Edit products. The shipped super-administrator, administrator and editor roles already carry both permissions and will notice nothing; a viewer can no longer change these areas. If you created a role of your own, grant it the respective permission once under Staff & Roles.

    Open the Knowledge Base →
  • Catalogue and customer screens now ask before anything is deleted or leaves the house

    Across 24 flat administration pages - products, categories, brands, properties, shipping methods, Google Shopping feeds, CMS pages, customer segments, business customers, subscriptions, marketplace vendors, email campaigns, saved reports, notifications and the customer inbox - 29 buttons fired on the first click. Each is now preceded by a prompt that names the consequence and names the affected record; where something goes out of the house, it also names the recipient. 20 native browser windows have disappeared - prompts here are now consistently dialogs of the interface and therefore behave the same in dark mode and with screen readers. Three places deliberately get no extra dialog, because you have already typed text there and the send button itself is the prompt: the reply in the customer inbox, the reply in the support inbox and the vendor invitation. Those three now also respond to the Enter key. One button was split: "Publish" and "Unpublish" of a CMS page sat on the same control; only publishing puts the page in front of every visitor of the website and now sits behind the prompt - unpublishing takes exactly that back and needs none.

  • Confirmation and invoice emails now carry dates in your language

    Order confirmations, payment confirmations, withdrawal confirmations, invoice dispatches and the subscription emails had their text rendered in the recipient's language for a long time - but the dates and amounts underneath were always formatted German. An English order confirmation therefore said “5. Januar 2026” and quoted an amount with German separators. Both now follow the language of the email: in English it reads “5 January 2026” with English separators. German emails are unchanged. Where no language is recorded for a recipient, the tenant's default language still applies.

  • Email templates: test send and branding now respond to the Enter key

    In the Send test email window you could type a recipient address but not send it with Enter - only the button worked. The window is a real form now: Enter sends, and an incomplete address is rejected by the browser before anything goes out. The same applies to both Save buttons under Branding (general and per language). These three deliberately get no extra confirmation - you fill in fields there and send them off on purpose, and that send button is the confirmation. Resetting a language version now does ask, naming the language concerned, and the browser's own window has disappeared from it.

    Open the Knowledge Base →
  • Field captions in order and email editing are now linked to their field

    In a customer's contact details, in the order detail (add line item, capture payment, edit line item, order flow), in the email campaign builder and in the email templates (block editing, branding, translation matrix) the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "Subject, edit box". That link is now in place. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. Some places sound different: where the caption sits above a group of several controls - alignment, social links and column widths in the campaign builder, a block's background, text and divider colour, and the primary and secondary colour plus the social links in the template branding - a screen reader now announces a group with that name; the same goes for the two rich text editors (block content and footer), which are not ordinary input fields. In two places there is no control underneath at all: the net price when adding and when editing an order line item is a computed value. It is now read out as ordinary text instead of as the caption of a field that does not exist.

    Open the Knowledge Base →
  • Field captions in shop administration are now linked to their field

    Across the shop's admin pages - products, categories, brands, properties, tags, navigation menus, blog, streams, the theme editor, template customisation, coupon codes, promotions and discounts, shipping, payments, redirects, Google reviews, Trusted Shops, webhooks and OAuth clients - the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "Product name, edit box". 81 captions now carry that link. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. Eleven places sound different: there the caption does not sit above a single input field but above a group of several controls - the colour swatches of a tag, the coupon type picker, a promotion's code type, a webhook's event list, an OAuth client's client type, scopes and grant types, the tag picker of a blog post, the from/to pair for delivery time in shipping, and the input fields for a new menu entry. A screen reader now announces a group with that name.

    Open the Knowledge Base →
  • Field captions in the shop admin are now linked to their field

    In the content page editor - block editors (heading, text, image, image with text, gallery, video, button, divider, spacer, HTML, accordion, product card, product slider, category grid, logo strip, stats banner, process steps, testimonial, newsletter, animated hero, feature grid, feature showcase, scrolling cards, call to action), section settings, page settings, page meta and SEO - in discounts and coupon codes, in product translations, currency pricing, product FAQ, the variant table and the variant wizard, in the category, property and tag translation dialogs, in the rule builder, in shipping templates, and in app configuration (OAuth credentials and API keys), the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name. That is fixed. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. Some of these places sound different: where what follows the caption is a group of several controls - a row of choice buttons such as text alignment, card style or display variant, a colour pair of swatch and hex field, a repeater list such as features, testimonials or process steps, a media picker, or a rich-text editor - a screen reader now announces a group with that name instead of reading out a caption with no field behind it.

    Open the Knowledge Base →
  • Field captions in the shop are now linked to their field

    On sign-in, registration, checkout, the customer account, forgotten password, returns and withdrawal, the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "First name, edit box". 50 fields now carry that link. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. One place sounds different: the "Account type" heading above the private/business toggle in registration was marked up as a field caption even though what sits below it is two buttons, not an input field. It is now read out as ordinary text instead of as the caption of a field that does not exist.

  • The close button of the shop's filter drawer now has a name

    On a phone the shop's filters open as a drawer from the side, and a cross button at the top right closes it again. That button carried no label - a screen reader read it out without a name, so all you heard was “button” instead of “Close, button”. It is now called “Close”. Nothing changes visually.

  • The shop formats prices and dates in the shop's language, not the browser's

    Price, number and date output in the shop came from helpers that read their language from a stored preference - but from the admin interface's, which the shop never writes. The lookup therefore never found anything and fell through to the next step: the browser's language setting. In practice the browser decided how a price looked for every visitor - a German shop opened on an English-configured device showed English-formatted prices. The shop's actual language is now read instead, and with none stored the shop's default applies. English shop pages show English formats, German ones German.

  • The shop now asks before something is deleted

    Six buttons in the shop screens used to fire on the first click - the section in the page editor, the multi-select in a product's variant table, the Buy X Get Y rule of a promotion, a promotion's unredeemed discount codes, a shipping template, and a review in the app store. Each of these now shows a confirmation that names the consequence: which record, and how many for bulk actions. Every browser window has disappeared from these screens - confirmations are now dialogs of the interface, which makes them consistent in the dark appearance and with screen readers. The variant table loses its red confirmation strip: deleting now asks in the same dialog as everywhere else instead of revealing a second button. The Buy X Get Y rule sits in two screens at once - under Promotions and under Automatic Discounts - and the confirmation now applies in both.

  • The storefront loads its content again

    A shop's public storefront page did come up, but stayed empty - no categories, no products, no settings, no shop-specific appearance and no cookie notice. What visitors saw instead was a generic page. The cause was a wrong address baked into the shipped storefront package: it requested its data from an address that does not exist (/api/... instead of /api/v1/...), so every data request came back empty-handed. The data itself was there and intact the whole time - it was simply never fetched. The address is corrected; products, categories, settings, appearance and the cart load again. There is nothing you need to do. To keep the same mistake from happening again, an automated check now verifies on every change that the address in the storefront package matches the interface's actual address.

  • CMS page editor moved to the shared interface controls (technical)

    In the page editor - block editors, section settings, the media picker, and the preview/structure tools on the left - buttons as well as text, choice and multi-line fields now come from the shared interface toolkit instead of each component carrying its own code. Look and handling stay the same; what becomes consistent is keyboard focus, contrast in dark appearance and the behaviour of disabled fields.

    Open the Knowledge Base →
  • Connecting an app through a sign-in window works again

    Apps you connect by signing in with the provider (Google, for example) came back from the consent step to an empty page reading "404 Not Found" - so the connection could never be completed. The cause was a routing rule in the delivery layer that sent the return address to the API instead of to the user interface. Fixed: the window now returns correctly, reports "Successfully connected" and closes by itself. Two improvements shipped alongside it: the provider's response is now checked against the sign-in you actually started and rejected if it does not match - so nobody else's account can be slipped in. And the one-time token the provider appends to the return address is removed from the address bar immediately after processing; it therefore appears neither in your browser history nor in our access logs. There is nothing you need to do - simply start the connection again.

    Open the Knowledge Base →
  • Customer addresses are now consistently encrypted at rest

    When someone created a customer account in your shop with a billing address, the first name, last name, street and phone number of that address were stored as plain text - even though the very same fields were stored encrypted whenever the address was created or edited later from the customer account area. Nothing about this was visible from the outside: the display was correct either way. From now on, every path that creates an address encrypts the same four fields. Addresses already stored are re-encrypted once, automatically, with no action on your part and no downtime; addresses that were already encrypted are left untouched. Nothing changes for you or your customers in day-to-day use - the GDPR data export still returns the address in readable form. Postal code, city, country and address supplement are not covered; that is technically prepared but not yet switched over.

  • Email Log opens again instead of reporting "Could not load email log"

    In newly set-up shops the Email Log page stayed empty and only reported that it could not be loaded. Cause: the page assembles its list from four data sources (Transactional, CRM, Workflow, Suppression list) and fetched them in one go; if even one of those sources was not yet set up or not readable in your shop, the entire query aborted - even though the other three were perfectly available. From now on the page checks up front which sources it can read, shows everything that is there, and states explicitly at the top which source is missing ("This list is incomplete"). If none of the four sources is readable, that is now spelled out instead of a meaningless error, and in the error case the message names the technical reason you can quote to support. There is nothing you need to do.

    Open the Knowledge Base →
  • Product editing and shipping templates moved to the shared interface controls (technical)

    In product editing (pricing, variants, FAQ, translations, digital downloads) as well as in shipping templates, buttons as well as text, choice and multi-line fields now come from the shared interface toolkit instead of each page carrying its own code. Look and handling stay the same; what becomes consistent is keyboard focus, contrast in dark appearance and the behaviour of disabled fields. The tables in these areas have not been moved yet and will follow later.

  • Unique page titles

    Several help pages carried exactly the same name as a page of the same name in another area, which made them impossible to tell apart in search results and listings. Affected in this area: Payments (Shop), Subscriptions (Shop) and Webhooks (Shop). The page addresses do not change, so saved links and bookmarks keep working.

  • Every email now identifies the provider

    Until now none of the automated emails carried a provider identification - neither the order confirmation to your customers nor the registration or password emails. German law requires this for commercial email (§ 5 DDG, § 18 (2) MStV). From now on, every outgoing email ends with a short footer carrying the legal company name, postal address, managing director, register court and number, VAT identification number, and a contact route. It appears in the HTML and the plain-text part (so text-only mail clients see it too), follows the language of the email - German or English, German when the language cannot be determined - and comes from the same maintained source as the legal notice on our website, so the two cannot drift apart. The details cover SELLERLOGIC as the operator of the platform, not your own; your footer text from the "Branding" tab is unchanged and still appears above it. You do not have to do anything, not even for templates you create later: the footer is appended at send time and is not stored in the template.

    Open the Knowledge Base →
  • Google Reviews no longer shows fabricated reviews

    The sync under "Google Reviews" used to accept any Place ID/API key combination and permanently write five hardcoded sample reviews with fabricated, named authors (including "Maria S.", "Thomas M.") to the database - regardless of whether a real Google Business Profile existed behind it. Those were fabricated reviews that looked like real customer feedback, not a real sync - and more serious than a display-only issue, because they were stored permanently. The page now shows only an honest notice that the Google Places connection has not been set up yet; "Sync" no longer writes anything to the database. Any fabricated reviews that already existed were automatically removed from all tenant databases.

    Open the Knowledge Base →
  • The Features page trust bar now shows only claims we can back up

    Your shop's public features page used to advertise a "SOC 2 Type II" seal, a PCI-DSS certification presented as complete ("PCI-DSS SAQ A-EP certified"), and the bare mention "PCI-DSS" as a seal on its own - none of them had a supporting audit report behind them. The trust bar and the security block on the storefront home page now list only what we can point to evidence for: server location Germany, GDPR, CCPA, and that no card data is stored on our servers (payments are processed exclusively by the payment service provider). Also removed: an App Store listing and a storefront badge (never actually shown in any shop) that both implied a Trusted Shops connection we did not have. There is nothing you need to do.

  • The Trusted Shops page no longer shows fabricated results

    The connection check under "Trusted Shops" used to report a green "Connected" badge, a "Valid" seal, and a fixed rating (4.82 stars, 1247 reviews) for any Trusted Shops ID that merely looked correctly formatted - regardless of whether a real Trusted Shops account existed behind it. That was a fabricated display, not a real check. The page now shows only an honest notice that the Trusted Shops connection has not been set up yet; there is currently no real connection check and no real reviews.

    Open the Knowledge Base →
  • CMS editor tree view, template store cards, and more drop zones now keyboard-operable

    In the CMS editor's tree/structure view, section and block rows as well as expanding/collapsing a section previously only worked with the mouse; the same applied to a card in the template store and its detail image preview, the drop zone for uploading product images, clearing a selection in the translation dialogs' language field, and, on the storefront, zooming the image in the product detail page's fullscreen view. All of these can now also be reached with the Tab key and triggered with Enter or Space.

  • More click targets in the Shop area now reachable without a mouse

    Several admin pages had individual elements that could previously only be clicked with a mouse. Fixed: the page title in CMS Pages (opens editing), a group's header row in Properties (expands or collapses it), the main image in the Template Store detail view (opens the fullscreen view), and the drop zone in the Media Library (opens the file picker) can now be reached with the Tab key and triggered with Enter or the Space bar.

    Open the Knowledge Base →
  • Registration and password emails are now available in English too

    When a shop was first set up, text strings were only created in German - English-speaking recipients received a German email through the language fallback. The "Customer registration" and "Password reset" templates now ship a maintained English version as well, marked as reviewed text rather than an AI draft. For all other templates you continue to maintain English via the translation matrix.

    Open the Knowledge Base →
  • Your welcome email now names your shop, not the platform

    Anyone creating a customer account in your shop received an email with the subject "Willkommen bei SELLERLOGIC SCS". For your customers that was simply wrong - they bought from you, not from us. The subject now reads "Welcome to your shop name", and the password reset email likewise carries your shop name in the subject ("Reset your password for your shop name"). Both templates offer the new {{shopName}} variable for this, which you can also use elsewhere in the editor. Existing templates were converted once; a subject you edited yourself is left untouched. The footer of the email shell no longer names the platform either, but your shop. There is nothing you need to do.

    Open the Knowledge Base →
  • Last traces of the old platform name "V3NDR" removed from your e-mails

    In long-standing shops, automatic e-mails to your customers could still carry traces of the old platform name: the footer showed "V3NDR" as the fallback while no company name was set under "Design > E-mail branding", the welcome e-mail after a customer registration was titled "Willkommen bei V3NDR", and the sender name could still show the old default "Mein V3NDR Shop". All three spots were cleaned up once: the footer now falls back to "SELLERLOGIC SCS", the welcome subject accordingly, and a never-changed sender name is derived from your shop name again. Your own texts, a company or sender name you chose yourself, and your translations remain untouched; an existing translation of the welcome subject is merely flagged for review.

    Open the Knowledge Base →
  • A typo in your shop address now visibly leads nowhere - instead of to a page that does not exist

    When someone opened an address under …scs.sellerlogic.com that belongs to no shop - because they mistyped the name, for example - a complete page still opened. It was empty, but it looked real. That was unfortunate for two reasons: in support a typo could not be told apart from an outage, and an invented, official-looking address was useful for abuse in forged e-mails. From now on a visitor in that situation is sent to the main address automatically. If someone opens an administration address with an unknown name, a clear notice naming the address that was not found appears instead of the sign-in form - previously there was a sign-in form for a shop that does not exist. Your own shop address and your administration are unaffected.

  • Some address names can no longer be used as a shop name

    The names appointment, ws and platform are now reserved, because fixed services are already reachable under them - appointment booking among others. Had one of them been issued as a shop name, that shop would have been permanently unreachable. Existing shops are unaffected; when creating a new shop such a name is now rejected with a notice.

  • Your shop is now usable on a phone

    On narrow screens your shop was hard to operate - content stuck out beyond the edge, so the whole page had to be pushed sideways, and many controls were too small to hit reliably with a finger. That is fixed. In detail: the product list shows items in one or two columns, and the page numbers wrap onto a second line instead of widening the page. On the product page the delivery, returns and payment notes sit below one another, the thumbnail strip can be swiped sideways, and the technical data scrolls inside its own box - long codes such as EAN or GTIN no longer shift the page. In the basket and at checkout the quantity controls, the remove button and the place-order button are large enough to tap, all address fields sit below one another, and the checkout step indicator gets a line of its own on narrow screens. The header keeps the basket and the menu visible, and every icon there now carries a label for screen readers. You do not have to change anything.

  • Downloads with meaningful file names

    The Google Shopping feed is now named after the feed name instead of the generic “google-shopping-feed.xml”. Purchased digital downloads are saved under their file name instead of the internal storage name, and product exports use the system-assigned name including the date.

  • "Cancellation reason" with consistent capitalisation

    The field shown when cancelling a subscription is now labelled Cancellation reason everywhere.

  • Checkout and customer account: address field now says "Company name"

    The field for the company entry in addresses now consistently reads Company name (following the German DIN 5008 addressing standard). The storefront also had a few remaining untranslated German-interface labels replaced with proper German wording (for example "Bestellverwaltung" instead of "Order Management").

  • Consistent wording in orders, invoices, returns and subscriptions

    The rows of a document are now called line items everywhere - previously the same thing was labelled "Items" in one view and "Line Items" in another, and the capitalisation varied. "Article number" (SKU) and physical goods, for instance in the warehouse, keep their names. Nothing changes in behaviour, only in labels.

  • Consistently "Refund"

    In returns and in the API documentation, the German interface used two different words for the same thing, "Rückerstattung" in some places and "Erstattung" in others. It is now Erstattung everywhere (refund amount, refund fees). The English interface is unaffected.

  • Marketplace: consistently "Vendor"

    Your marketplace vendors are now called Vendor throughout menu, lists and detail views - previously "seller" and "vendor" alternated. Suppliers in procurement remain suppliers.

  • The German interface no longer shows English leftovers

    Labels such as "Orders/Monat" or "Order Management" in the German interface have been translated properly. The English interface is unaffected.

  • The product area no longer shows German in the English interface

    When uploading product images, the progress text, the hint about image order, the image and video counts and the messages about unsupported formats and failed uploads appeared in German even with the language set to English. The same applied to the rich-text editor toolbar ("Insert emoji", "Text style", "Clear formatting") and the input example when creating a redirect. All of those texts are now maintained in both languages.

    Open the Knowledge Base →
  • A link without an address is no longer sent silently

    If no valid address can be determined for a message, sending is now aborted and recorded in the error monitor instead of delivering a message with an unusable link.

  • Customer tags can be opened and created again

    In the customer detail view the tag picker stayed empty and creating a new tag failed - the list could not be loaded at all. The cause was an older state of the data store in which a tag was still tied to exactly one customer, whereas today's version keeps tags as a list of their own and then assigns them to any number of customers. That data state is now brought up to date automatically. The picker shows the standalone tags from now on; older entries attached directly to a customer through customer segmentation are kept unchanged and still shown there. There is nothing you need to do.

    Open the Knowledge Base →
  • Customer views without initials circles

    The colored initials circle shown before the customer name has been removed - in the customer list, on the customer detail page, in reviews, in subscriptions, and in your customers' account overview in the shop. The views show the name directly and take up less space.

    Open the Knowledge Base →
  • Emails that were never sent are now visible

    When sending was aborted because the customer has no email address on file, no entry was created at all; an email that was never sent looked exactly like one that was. Such cases now appear with the status Not sent and the reason in plain language. You can filter for them in the Email Log.

    Open the Knowledge Base →
  • Links in emails are built per tenant again

    For a number of notifications the address was not taken from your shop settings but from a central default that was empty in practice. In concrete terms: signature invitations contained a link with no address at all, and confirmation links from self-registration pointed at the recipient's own machine instead of SCS. Also affected were ticket reminders and reopen links, CSAT surveys, escalation alerts to team leads, HR requests, the review digest, the account links in subscription and download emails, the embedded appointment booking window, sitemap.xml, robots.txt and the blog RSS feed. All of these now take the address from Settings → Domains & URLs; if nothing is stored there, your public shop address is used automatically. You do not need to do anything.

    Open the Knowledge Base →
  • Still outstanding: the confirmation link from self-registration.

    At the time of a new registration your shop does not exist yet, so no shop address can be used. The link therefore now points at the general sign-in address admin.scs.sellerlogic.com instead of, as before, the recipient's own machine. That one address is not being served yet; the routing addition required for it has been commissioned and will follow separately. Until then the confirmation link cannot be opened.

  • The Email Log now shows your sending service's reference

    The detail view of an email now includes the delivery path actually used and the identifier your provider filed the email under. That makes an email unambiguously findable at the provider when in doubt.

    Open the Knowledge Base →
  • Your shop shows data again on its public address

    When a visitor opened your shop at your-name.scs.sellerlogic.com, the page could not load its content - products, cart and customer account stayed empty, because the requests to our system went nowhere there. This is fixed; you do not have to change anything. Only the public address of your shop was affected, not the admin area.

  • Outgoing emails now carry your shop name

    Until now your customers saw the sender name "Shop" in their inbox whenever no custom name was stored in the email delivery settings. From now on SCS automatically uses your shop name from the shop settings in that case. A sender name you entered yourself is untouched and still takes precedence. You can now also clear the field again to go back to the shop name.

    Open the Knowledge Base →
  • Payroll and master-data exports are sent in your company's name too

    Exports to your payroll office used to carry a technical sender name. They now arrive under your shop name as well.

  • Webhooks: new SCS headers, the old ones keep going

    Every notification we send to your own software carries technical headers with the event, the signature, a delivery number and the timestamp. These used to be called X-V3NDR-... and will be called X-SCS-... from now on. So that nothing breaks, we send both sets at the same time during a transition period, with identical values and the same signature. You do not have to do anything for your existing integration to keep working. When you get the chance, please switch your signature check to X-SCS-Signature, or accept either name. The old names will only go away after that transition period, and we will announce it beforehand. The example under Shop → API documentation → Webhooks now shows both sets exactly as they arrive at your end.

    Open the Knowledge Base →

Marketing

  • Dropdowns in marketing are now read out by name (#2859)

    Affected were the SEO view with target type, topic cluster, search intent and status, social media with platform and status, and the marketing automations with field, operator, value and action. Anyone using them with a screen reader heard nothing but "combo box" there - with no hint of what was being selected. All of them now carry a spoken name in German and English. Nothing changes visually. SEO · Social media ·

    Open the Knowledge Base →
  • An outage of the integrations list no longer looks like "nothing connected" (#2771)

    When the overview of your connected Google and social media accounts could not be loaded, the page used to show an empty list - exactly the same picture as an account you had just disconnected. Anyone looking at it saw no error, only a seemingly normal empty state, and nothing was written to the platform's error log. The same applied to disconnecting: if the deletion failed, the page reported "not found", as if the connection had been gone all along. Both are fixed. If the list cannot be loaded, the page now reports an error instead of an empty list, and the incident is logged so support can trace it. "Not found" now appears on disconnect only when the connection is genuinely gone. A list that loads and a disconnect that succeeds are unchanged.

    Open the Knowledge Base →
  • Determining search intent via AI works again

    In the keyword workbench under SEO, the

  • The connection error page no longer shows text from the provider (#2492)

    When you connect an advertising or social media account and the provider rejects the connection, the small window used to print the provider's error text verbatim. That text arrived unchecked from outside and could be abused: anyone who sent you a prepared address could have foreign content executed inside that window. The window now shows a fixed message telling you to start the connection again from the admin area; the provider's exact error code still goes to the log, where support can look it up. This affects the connections to Google Ads, the Google services (Search Console, Analytics, Tag Manager, YouTube, Business Profile) and the social networks (Facebook, Instagram, LinkedIn, X, TikTok). A successful connection is unchanged - the name of the connected account is still shown.

    Open the Knowledge Base →
  • SEO and social media now ask before anything disappears or goes public (#1916)

    Under Marketing → SEO the bin icon in the keyword table removed a keyword straight away, and under Reports an alert rule vanished on the first click. Both now ask first and name the keyword or the kind of rule concerned. Under Marketing → Social media, "Publish" now asks as well and names who it reaches: the network and all of your followers. A published post cannot be pulled back out of the network's caches. Drafting is unchanged - writing, scheduling and saving still happen without a confirmation.

    Open the Knowledge Base →
  • Coupon permissions now actually take effect (#2222)

    Under Staff & Roles you could grant the coupon permissions view, edit and delete, and the server never checked them: a role carrying only those still ran into an error, and revoking them locked nothing. The coupon endpoints now check both spellings that the permission editor and the public API offer. The shipped roles carry both and will notice nothing.

    Open the Knowledge Base →
  • Sending a newsletter now demands the "Send newsletter" permission (#2222)

    Until now the Edit newsletter permission was enough to put a finished campaign in front of every subscriber - the dedicated Send newsletter permission was checked by nobody. Sending now really demands it, and the Send button in the campaign editor only appears for accounts that carry it. Of the shipped roles, super administrator and administrator still send; an editor writes, designs and schedules campaigns as before but no longer triggers the send. If you created a role of your own, grant it Send newsletter once under Staff & Roles.

    Open the Knowledge Base →
  • The review list now demands the "View reviews" permission (#2222)

    The overview under Shop → Reviews and the detail view of a single review were open to every logged-in account - customer name, title and free text included. Both now demand View reviews. Every shipped role down to the viewer already carries it, so anyone who could open the page before still can.

    Open the Knowledge Base →
  • Content and SEO now ask before something is deleted or goes live

    Under Marketing → Content, the row menus used to delete a blog article, a page or a menu on the first click - no question asked and no way back. Each of these three deletions now shows a confirmation naming the affected entry. Publishing and un-publishing a page now asks too, and names who it reaches: every visitor to your storefront. Under Marketing → SEO, the small cross on a keyword cluster used to remove it immediately; there too a confirmation now appears, naming the cluster.

    Open the Knowledge Base →
  • Field captions in marketing are now linked to their field

    Under marketing automations, newsletter and the Google Shopping feed, the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "Subject, edit box". 30 captions now carry that link. Nothing changes visually - captions, spacing, colours and field sizes are unchanged, and nothing is read out differently than before either: every one of these captions always belonged to exactly one input field, it simply was not linked to it.

    Open the Knowledge Base →
  • Field captions on the social media page are now linked to their field

    When scheduling a post, the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "Subject, edit box". That link is now in place. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. One place sounds different: above the post type there is no input field but a row of choice buttons; a screen reader now announces it as a group with that name.

    Open the Knowledge Base →

Marketplace

  • Every dropdown in the marketplace is now read out by name (#2859)

    Affected were the status filters in compliance, disputes, payouts, reviews and vendors, the sort order of the vendor list, the rejection reason for listings, the payouts and vendors of the merchandising service, and vendor KYC. Anyone using the area with a screen reader heard nothing but "combo box" there - with no hint of what was being selected. All of them now carry a spoken name in German and English. Nothing changes visually. Vendors · Disputes ·

    Open the Knowledge Base →
  • A marketplace sign-in is now only valid in its own shop

    Signing in to one shop's marketplace also opened the marketplace pages of every other shop - profile, addresses and orders included. The sign-in was not tied to a shop when it was issued, and the check on arrival let a missing tie pass. Both are fixed: a sign-in now carries the shop it was issued for, and is rejected in every other shop. Existing marketplace sessions have to sign in once more. Nothing changes for sign-ins within their own shop.

  • The marketplace administration now requires the "Edit marketplace" permission

    Configuration, contracts, vendors, listings, commissions and payouts could be changed by every logged-in employee - rewriting a commission or releasing a payout required no permission whatsoever. The server now checks this on every one of those changes. The shipped super-administrator, administrator and editor roles already carry the permission; a viewer can now only look at the marketplace. Roles you created yourself need the permission granted once under Staff & Roles.

    Open the Knowledge Base →
  • The caption above the rejection reason picker is now linked to that picker

    Under Listings, "Reject" opens a small dialog in which the reason for the rejection is chosen. The caption above it was not technically linked to the picker, so a screen reader read out the individual controls without the name they belong to. The picker is now marked up as a group carrying that caption and is announced accordingly. Nothing changes visually.

    Open the Knowledge Base →
  • Listing row now reachable without a mouse

    In Listings (Marketplace), a product listing in the list could previously only be opened with a mouse click. Fixed: the row can now be reached with the Tab key and opened with Enter or the Space bar.

    Open the Knowledge Base →

Sign

  • The dropdowns in the signature editor are now read out by name (#2859)

    Affected were the validation rule of a field and the document picker above the page preview. Anyone using the editor with a screen reader heard nothing but "combo box" there - with no hint of what was being selected. Both now carry a spoken name in German and English. Nothing changes visually.

    Open the Knowledge Base →
  • All envelope emails now have a complete salutation (#1852)

    When a recipient or the sender had no name on file, the notification emails (invitation, reminder, completion, decline, void, expiry warning) sometimes showed "Hallo ," with a visible gap before the comma. The salutation now uses the name on file; without one, a general but complete salutation appears in the recipient's language - never an open gap.

    Open the Knowledge Base →
  • Removing a document from an envelope now asks first (#1916)

    In the envelope wizard, step 1 (documents), the bin icon next to a file removed it from the envelope straight away - together with every field already placed on it. A confirmation now appears first, naming the file name. Uploading, reordering and saving are unchanged.

    Open the Knowledge Base →
  • A caption in the field editor is now linked to its field

    In a document's field editor, the caption of the maximum length validation rule was not technically linked to the input below it. Clicking it did not put the cursor in the field, and a screen reader announced the field without a name. Both are fixed; nothing changes visually.

    Open the Knowledge Base →
  • Captions of choice fields during signing

    when filling in a choice or text field, the question above the field carried a caption that was not technically linked to it. For a choice field with a drop-down list, clicking the question now moves focus into the list. Where the choice is presented as a button group instead, the question is now read out as ordinary text rather than as the caption of a single field - what announces the group itself is unchanged. Nothing changes visually.

  • Field captions in the signing settings are now linked to their field

    Above the reminder interval, the validity period and the advance warning, the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "Subject, edit box". That link is now in place. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. One place sounds different: the signature pad on which the specimen signature is drawn is not an ordinary input field. Its caption now names it all the same, so a screen reader announces it with that name.

    Open the Knowledge Base →
  • The completion certificate follows the signers' language

    The emails of an envelope had been going out in each signer's own language for a long time, but the certificate appended to the signed PDF always carried its timestamps in German - so a signer who corresponded in English received a German-dated document stapled to it. When every signer shares one language, the certificate now follows that language. When the languages differ, the previous German format stays: there is no single answer in that case, and choosing one silently would restyle the certificate for the remaining signers.

  • Place signature fields without a mouse

    In the Fields step of the envelope wizard, signature, text, and other fields could previously only be placed by clicking or dragging on the document page. The keyboard now works too: select a field type from the palette, focus the document area, and confirm with Enter or Space - the field appears centered on the page. To move an already-placed field, focus it with Tab and press the arrow keys; hold Shift for bigger steps. The existing mouse and drag behavior is unchanged.

    Open the Knowledge Base →
  • Signature fields in the document are easier to tap

    A field in a PDF is often only about 20 pixels tall on a phone - well below what a finger hits reliably. Every field now carries an invisible, slightly larger tap area around it. Nothing changes visually and the fields stay exactly where they sit in the document; they are simply easier to hit.

    Open the Knowledge Base →
  • Signers can finally read the document on a phone

    The signing page had zooming switched off. On a phone an A4 page is rendered at roughly 40 per cent, which made the contract text impossible to decipher, with no way to enlarge it. Zooming is now allowed, so anyone asked to sign can first read what they are signing. The signature field itself is unaffected: drawing with a finger still does not pan or zoom the page.

    Open the Knowledge Base →
  • Meaningful file names when downloading

    The final signed PDF is now named after the envelope (e.g. “Arbeitsvertrag.pdf”) and the document view after the document itself - instead of the internal storage name. Umlauts are preserved.

  • Signer interface now light by default, dark mode selectable

    The public signing page (the page your signers open via the signing link) is now shipped in light mode by default, regardless of the visitor's system setting. A toggle in the top-right corner lets signers switch to dark mode if they prefer; the choice is remembered the next time they open the link. The toggle is fully keyboard-operable. The document (PDF) view was checked in both appearances.

  • Clear messages when sending an envelope

    If an envelope could not be sent - for example because no document, no signer, or no signature field for a signer had been added - a raw English error message used to appear, sometimes on top of a generic "Something went wrong" message. These messages now appear in your language (German and English) and only once, clearly stating what the problem is.

    Open the Knowledge Base →
  • The wizard now guides instead of only warning

    If a signer still has no field placed on the Review & send step, the Send now button is now disabled. A notice names the affected signers and takes you straight back to field placement with the right recipient preselected. That way you notice the missing field before sending rather than through an error message afterwards.

    Open the Knowledge Base →

Tasks

  • Dropdowns in tasks and projects are now read out by name (#2859)

    Affected were the task list with project, priority and assignee, goals, custom fields, task rules with trigger and action, webhooks, templates with section and priority, team management and project sharing with role and team, the Asana import, and in the project area the project list with status, priority and sort order, the kanban board, the task list and time tracking. All of them now carry a spoken name in German and English. Nothing changes visually. Tasks · Rules ·

    Open the Knowledge Base →
  • "Redeliver" in the delivery log now asks first - and names the target address

    Redelivering from a webhook's delivery log used to fire on the first click. It is not a local retry: the payload goes to the address you configured, carrying a valid signature, and is indistinguishable there from the original delivery - depending on the receiving system it can trigger an order, re-open a case, or create a record twice. Nothing on this screen can recall it. A confirmation now appears before it is sent, naming the event and the target address the signed delivery goes to. Only confirming sends it; cancelling sends nothing. The delivery itself, the retries and the log are unchanged.

  • SCS now creates tasks by itself - and closes them by itself too

    when an employee submits an absence request, a real task is now raised for their direct supervisor - with title, period, a link to the decision, and a due date three days after submission. It therefore sits in My Tasks alongside everything else that has to be done, instead of living only in the bell. The important part is the closing: as soon as the request is approved, rejected or cancelled the task is complete - including when somebody else decided it, and without anyone having to tick it off. Where several people are responsible, each has their own task and all of them close together the moment one of them decides. A task cancelled by hand stays cancelled - it is not quietly flipped to "completed" later. The request is still decided under HR → Absences → Requests; the task takes you there but does not replace the decision.

    Open the Knowledge Base →
  • The background reconciliation now closes the task as well, not only the worklist entry

    a process such as an absence request creates two things: an entry in your worklist and a real task in My Tasks. Normally both close the moment the request is decided. If that notification failed to fire, the regular background reconciliation used to make good only the worklist entry - the task stayed open and had to be ticked off by hand, even though the matter had long been decided. The reconciliation now closes both. A task cancelled by hand still stays cancelled - the reconciliation does not quietly flip it to "completed". You only notice this where a task would previously have been left standing; it now disappears by itself at the next reconciliation at the latest.

    Open the Knowledge Base →
  • Field captions in projects and tasks are now linked to their field

    In the projects (task form, team, time tracking, project list) and in the tasks (custom field values, detail view, recurrence, rules, task list, task type builder, webhooks) the input fields carried a caption above them that was not technically linked to the field. That had two noticeable consequences: clicking the caption did not put the cursor in the field, and a screen reader announced the field without a name - you heard "edit box" instead of "Subject, edit box". That link is now in place. Nothing changes visually - captions, spacing, colours and field sizes are unchanged. Some places sound different: where the caption sits above a group of several controls - the choices of a custom field, the weekdays of a recurrence and a webhook's event selection - a screen reader now announces a group with that name. In a task's detail view, the captions above the person picker and the company picker now name those pickers themselves, so each is announced with its name when you reach it.

    Open the Knowledge Base →
  • People search in quick search

    Searching for colleagues from the tasks search box now goes through the encrypted search. It still matches parts of a name; search terms shorter than three characters no longer return people.

  • Tasks, goals and portfolios load again in newly created workspaces

    In workspaces created since the move to encrypted personal data, the task list, "My tasks", the goals and the portfolios reported a server error instead of their content. The cause: those views still read the assignee's name from the old plaintext fields of staff management, which no longer exist there. The views now read the name from the encrypted fields - the pages load again, and the name shown is the same as before.

    Open the Knowledge Base →
  • Tasks and projects moved to the shared controls (technical)

    Across the task and project pages - board, list, timeline, calendar, My Tasks, inbox, task details, portfolios, goals, automation rules, webhooks and the task types - buttons as well as input, select and text fields now come from the interface's shared building blocks instead of per-page code. Look and behaviour stay the same; what becomes consistent is keyboard focus, contrast in dark appearance and the behaviour of disabled fields. Icon-only buttons additionally carry a screen-reader label throughout.

    Open the Knowledge Base →
  • Unique page titles

    Several help pages carried exactly the same name as a page of the same name in another area, which made them impossible to tell apart in search results and listings. Affected in this area: Automation Rules (Tasks). The page addresses do not change, so saved links and bookmarks keep working.

  • The module page is now called "Tasks Overview"

    It carried the same title as the "Tasks" area page, which put two indistinguishable results next to each other in Knowledge Base search and in search engines. The new title says what the page is: the introduction to projects, boards and views. Nothing changes about the content, the address or any link.

    Open the Knowledge Base →
  • Tasks and projects are now fully usable from the keyboard

    In the list and board views, in "My tasks", in the inbox, in the timeline project plan and in the task type builder, clickable rows, cards and timeline bars can now be reached without a mouse - tab to them and trigger with Enter or the spacebar.

    Open the Knowledge Base →
  • Tasks and projects without initials circles

    Names used to be preceded by a colored initials circle. It has been removed everywhere: in the project overview and the share dialog, in "My tasks", in the list and board views, in the task detail view (assignee, collaborators, subtasks), on the tasks home page, and in the project list and the project tabs "Team" and "Board". The views now show the plain name; a stored profile picture is still displayed.

Bug tracker

  • The AI draft for a bug report works again

    While recording a fault you could ask for a draft built from a call, a support ticket or a note. Until now that request always ended in a generic error, because the draft could not load the configured product list. The query now reads the correct column: the draft is produced again, and the suggested product is resolved against your active products. If no language model is reachable or the monthly budget is spent, the interface still tells you so explicitly instead of failing with an unspecific error. The draft still stores nothing: you take it over only after you have read it.

  • The AI draft for recording a bug works again

    The button that turns a note, a ticket or a call

  • The bug tracker now has an area of its own

    Until now the bug tracker was reachable only through the combined "Portal management" entry under CRM, and its help page lived in the CRM area of the knowledge base. Both are separated: the navigation now carries its own Bug tracker entry, and the knowledge base has its own "Bug tracker" area. New in it is the page What customers see: before you publish anything, it answers which entry shows up in the customer portal, which one only the reporter sees, and why a fault rated critical stays off the public page until it is fixed. Your bookmarks to the previous help page keep working.

    Open the Knowledge Base →

Roadmap portal

  • The roadmap no longer starts empty, and the empty state says what happens next

    a freshly set up portal used to show its customers a blank page with the sentence "Nothing in this column." - which answered the question "are you working on anything at all" with "no", without meaning to. Two things are new. First, a portal in which no card has ever been created receives two explanatory starting cards on first start; they are published and can be edited or deleted in portal management like any other card. Second, the empty state now names the next step: if a product filter hides everything, the product is named and a button clears the filter; if nothing has been published yet, the page leads to the request form, and the release archive leads back to the roadmap. Details: Customer Portal: Roadmap & Sign-in.

    Open the Knowledge Base →
  • The roadmap portal now has an area of its own

    Until now the roadmap portal was reachable only through the combined "Portal management" entry under CRM, and its three help pages lived in the CRM area of the knowledge base - between leads, tickets and customer records, where nobody looks for a roadmap. Both are separated: the navigation now carries its own Roadmap portal entry, and the knowledge base has its own "Roadmap portal" area. It holds Customer Portal: Roadmap & Sign-in, Roadmap portal: feature requests and Roadmap portal: notifications. Portal management stays where it is: besides the roadmap it also curates the bug board, moderation and the portal products. Your bookmarks to the previous help pages keep working.

    Open the Knowledge Base →

Documents (DMS)

  • Signing now asks before the signature stands

    In the signature overview (Documents → Signatures) the sign tick sits right next to the decline cross - and it used to fire on the first click. A signature is legally binding: it records the IP address, user agent and consent text, moves the entry to "Signed", and a second attempt is refused. Nobody can take it back, not even the platform operator. A confirmation now appears before it is carried out, naming the document and the signer, so you can check both before confirming. Cancelling leaves the entry untouched at "Pending". Declining and all other details are unchanged.

  • Downloads now carry the document title

    Downloaded files are named after the title shown in the system instead of the internal storage name. This applies to downloads in document management and in the customer account. Umlauts and special characters in the title are preserved; if no title is set, the original file name is still used.

July 2026

HR

  • Requested vacation is finally visible

    Anyone who submitted a request under Employee portal → My absences could not see it anywhere afterwards - neither in the year calendar nor in either list. It only appeared once it had been approved; until then there was no confirmation that the request even existed. Pending requests now show up immediately: in the year calendar as outlined days in the colour of the absence type (approved days stay filled in solid), and in the list with the Pending marker. The legend calls them "Requested". A public holiday stays red even when a request runs across it. Approvers see their employees' open requests in the vacation tab of the employee file in exactly the same way. This does not change your balance: "Available" and "Planned" still count approved days only - a request books nothing. The number of requested days is shown in the info panel of the balance card as of which requested.

    Open the Knowledge Base →
  • The "Urlaub" tab is now called "Absence"

    In the employee file, the tab holding entitlements, the year calendar and the requests was labelled "Urlaub" (leave), even though it always showed every absence type - including sick leave and parental leave. It is now called "Absence" ("Abwesenheit" in German). Saved or shared addresses remain valid; only the label changes.

    Open the Knowledge Base →
  • Year calendar: absences are now visible on non-working days as well

    On weekends and other non-working days, grey used to win - a holiday spanning a weekend visually broke apart in the calendar. A clear order now applies: public holidays are always red and beat everything, including vacation or sick leave falling on the same day. Vacation (green) and sick leave (yellow) are now visible on non-working days too, shown there in a lighter shade of the same colour so it stays recognisable that this is not a working day. Non-working days without an absence stay grey. This works for every absence type in its own colour. Nothing changes in the calculation: weekends and public holidays are still not deducted from the entitlement - the lighter shade is exactly the cue for that. This display supersedes the rule of 2026-07-29, under which weekends inside a vacation stayed grey.

    Open the Knowledge Base →
  • "Manager" is now called "Approver"

    In the employee record under "Position" the field was labelled misleadingly. It determines who decides this employee's requests - the same person also forms the reporting line in the org chart. Nothing changes in behaviour, only the label.

  • "Manager" is now called "Approver" everywhere

    The field was labelled differently depending on the view - already "Approver" in the employee record under Position, but still "Manager" in the organisation tab, the employee list, the create form and the employee portal. All views now use the same name. It determines who decides this person's requests; the same person also forms the reporting line in the org chart. Nothing changes in behaviour.

  • "My profile" now shows every stored detail

    Fields stayed empty in the employee portal even though the employee record had values. Affected were position, approver, emergency contact, bank details including IBAN, nationality, pronouns, and start/end date. The cause was an outdated field list in the portal query; it is now tied to the employee record so new fields carry over automatically.

  • Absence calendar shows type, colour and half days

    In the monthly calendar under People → Absences, every entry carried the same colour, the tooltip ended after the dash without the absence type, and whether someone took a half or a full day was not visible at all. Each absence type now has its own colour again, the tooltip names the type, and every bar carries on its right whether it is a full day (1) or a half day (½) - visible without hovering. In the request list, "Yes" and "-" have been replaced by "full day" and "half day".

  • Absence calendar: the month in the address bar now counts 1 to 12

    The page address used to carry the month the way programs count - ?month=0 was January, and there was no month 12. It now shows the month the calendar shows: 1 for January through 12 for December. Saved or shared addresses from before will land one month early for February through December; just set them again.

  • Absence calendar: weekends are no longer coloured as vacation days

    When a weekend fell inside an approved absence, the year calendar coloured Saturday and Sunday green like a vacation day. They were never deducted, so the display contradicted the number beside it. They now appear grey as non-working days. The same applies to public holidays inside an absence: they keep their own colour. Which weekdays are non-working follows the contract; someone who works Saturdays per contract still sees Saturday as a vacation day.

    Open the Knowledge Base →
  • Absence types in your interface language

    The standard types "Urlaub" and "Krankheit" now appear in the language of the interface - in the English view "Vacation" and "Sick leave" instead of the previously fixed German name. Types you created yourself keep the name you gave them. This applies to the vacation tab of the employee file, the employee portal and the absence list.

    Open the Knowledge Base →
  • Approve, reject and cancel take effect immediately

    In the request list, the row kept showing its old state after clicking Approve/Reject/Cancel - the action had run, the view just did not show it. The cause was a wrong key when refreshing the data. The request list, calendar, key figures and remaining entitlements now update right away. In addition, a short message confirms every action, and if the server refuses it (e.g. no remaining entitlement, a blocked period or the four-eyes principle), the reason is shown - until now a refused click stayed completely silent.

    Open the Knowledge Base →
  • Clear colour code in the vacation calendar

    Public holidays are now marked red (previously orange), vacation stays green, and the standard type "Krankheit"/sick leave changes from red to yellow - so holidays and sick days can be told apart at a glance. If you changed the colour of an absence type yourself, your choice is kept.

    Open the Knowledge Base →
  • Contract row: edit and delete as icons

    In the "Contract data" tab, the words "Edit" and "Delete" sat next to every contract. They were the loudest element in the row and drew attention away from contract type, period and status. There is now a pencil and a bin icon; the wording appears as a tooltip on hover and stays fully readable for screen readers.

    Open the Knowledge Base →
  • Employee record: error page on opening fixed

    Opening an employee record occasionally showed "Error loading" instead of the record, and only a retry helped. The cause was a loading-order fault that struck exactly when the employee's data arrived slightly later than the view itself. The record now opens reliably.

    Open the Knowledge Base →
  • ID documents: up to 5 files instead of one

    The employee profile allowed exactly one scan on the ID document - not enough for front and back, a passport in addition to the ID card, or expired predecessors. Up to 5 files can now be uploaded (multi-select in the file dialog) and are listed one below the other with name, download and delete. The first file is marked as the primary document - the one the payroll export reads; if it is deleted, the next one takes over. Previously "Remove link" only detached the reference and left the file behind invisibly; "Delete" now really removes it.

    Open the Knowledge Base →
  • New: manage departments and positions yourself

    Under HR > Departments & positions there is now a dedicated page for creating and editing both master records. Until now there was no interface at all - departments and positions appeared everywhere as pick lists but could not be filled anywhere; without entries you saw empty dropdowns throughout. The page has two tabs (Departments, Positions) with search, an employee count per entry, and the head or owning department. Positions may deliberately exist without a department (e.g. managing director). The tab and search term live in the address bar, so a shared link reopens the same view.

    Open the Knowledge Base →
  • No more sick note for vacation

    Vacation requests of three calendar days or more arrived in the request list flagged red with "Sick note missing". The cause was the per-employee setting "Sick note from day": it is meant as a sickness rule but was applied to every absence type. The sick-note requirement now applies only to absence types recognised as sickness. For vacation, parental leave and all other types it is triggered only if you set the threshold explicitly on the type itself (e.g. for a rehab stay). Requests already flagged incorrectly are cleaned up automatically with this update - requests with an uploaded sick note are left untouched.

    Open the Knowledge Base →
  • Non-working days are color-coded in the year view

    The 12-month calendar on the "Leave" tab (and in self-service) now highlights non-working days in neutral gray, clearly distinguishable from public holidays (amber) and absences. The legend calls them "Non-working day".

  • Preferred name is finally saved

    The "preferred name" field could be filled in, but the value vanished on save because the database had no field for it. It has been added. You can now change your preferred name yourself and it shows up in your profile afterwards.

  • Preferred name is now in the employee record too

    The "preferred name" field existed only in the employee portal, and the value vanished on save there. In the employee record under Personal details you can now enter, see and change it. It does not replace the first name; it records how the person prefers to be addressed day to day.

  • Public holidays now apply even without an assigned holiday calendar

    On the employee profile under "Leave", the page showed "No calendar" and an empty holiday list whenever no holiday calendar was assigned - even though a country was stored on the profile (e.g. UA) and the leave calculation had been deducting its holidays all along. Without a calendar, the employee's country (and state) now applies automatically, and a note above the list names the source. An assigned calendar still takes precedence. Only when neither a calendar nor a country is stored does the list stay empty, with a matching note.

    Open the Knowledge Base →
  • Requests show who decided

    The detail panel of an absence request has a new Decision section with the name and timestamp for approval, rejection and cancellation - plus the stored comment on a rejection. If an already approved request was cancelled later, both events are listed. Background: approvals and rejections were stored but shown nowhere, and cancellations were not recorded at all - the only status change without an actor, even though it credits entitlement days back. If the employee cancels in the employee portal, that is marked separately. Older cancellations show "not recorded"; the actor cannot be reconstructed retroactively.

    Open the Knowledge Base →
  • The request list now shows who decided

    Under Absences → Requests the list has a new Decision column with name and timestamp. This was previously only in the detail panel, so every request had to be opened individually. For a request that was approved and later cancelled, the column shows the cancellation; both events side by side remain in the detail panel.

  • Vacation days follow the contractual working days

    Which weekdays are days off now comes from the working days on the active contract (employee profile, "Time" tab) instead of a fixed "Monday to Friday". Someone who works Saturdays now correctly spends a vacation day on a Saturday off; a part-timer with Wednesdays off spends none on a Wednesday. This applies to newly submitted requests as well as to the color coding in the year calendar. Without maintained working days, Monday to Friday still applies - so nothing changes for most employees.

    Open the Knowledge Base →
  • Contracts can be deleted

    A contract in the "Contract data" tab can now be removed again - until now it could only be created and edited. A confirmation prompt comes first. An uploaded contract file stays in the employee's document list.

    Open the Knowledge Base →
  • Position and manager are shown again

    In the employee profile and under "My profile", the Position and Manager fields stayed empty even though the data was on file. Both are displayed correctly again.

    Open the Knowledge Base →
  • The ID number now stays

    An ID document number appeared empty again after saving. The number was in fact stored but no longer displayed - both are fixed.

    Open the Knowledge Base →
  • Contracts: all contracts visible + contract document on the contract

    The "Contract" tab previously hid every contract except the most recent one - adding a new contract therefore looked as if it had overwritten the previous one (older contracts were stored, just invisible). All contracts are now listed one below the other, most recent first and marked "Current"; each contract can be edited individually. In addition, a contract file uploaded when creating the contract was not visible at all in the Contract tab (it only appeared under "Documents"). The file is now shown on its contract and can be downloaded there.

    Open the Knowledge Base →
  • Employee overview: new list view with a List/Cards toggle

    The employee overview can now be shown either as a compact list (table) or as the card overview. Switch between them with the new "List / Cards" toggle to the right of the filters; the list view is the new default. The list shows, per employee, the name and employee number, position, department, hire date, access (IAM or "Invite"), and status plus employment type. Clicking a row opens the detail view - just like clicking a card; the status tabs, search and filters behave the same in both views. The selected view is stored in the page address (URL), so a shared or bookmarked link reopens the same view.

    Open the Knowledge Base →
  • Employees can edit their own absence requests

    As long as a request has not been decided, it can be adjusted directly in the list in the employee portal (change the date range) or withdrawn. Approved requests stay unchanged and can still only be cancelled.

  • ID documents can be uploaded again

    Uploading an ID document in the employee profile failed with an error. The cause was a setting in the document store that rejected this one document type - all other types (employment contract, payslip, onboarding document, certificate, other) were unaffected. ID documents are now stored normally.

  • Multiple requests in parallel

    An open request no longer blocks further requests for other date ranges. A message appears only for a genuine overlap - and it now names the conflicting request with its date range and status instead of rejecting without detail.

  • New: "Offboarding" tab on the employee

    The employee detail view now has an Offboarding tab where you plan a departure: termination dates (notice given on / effective), the end of SELLERLOGIC SCS access, the planned handling of the personnel data (retain, anonymize, delete or export & delete) including an action date, plus succession for six responsibility areas (direct reports, absence approvals, department lead, open tasks, tickets, document ownership). This step only stores the plan - access is not disabled, responsibilities are not reassigned and data is not anonymized or deleted; the actual execution follows in a later, separate step (a note in the tab points this out). For any data handling other than "Retain data" an action date is required; the departing employee cannot be chosen as their own successor.

    Open the Knowledge Base →
  • Notification for new absence requests

    When an employee files a leave or absence request, everyone with the personnel-management permission now receives a notification in the bell menu - including name, period, and a direct link to the request. Previously a new request went unnoticed until someone opened the request list on their own.

  • Offboarding: automatic access deactivation + due list for data actions

    Offboarding now executes the plan. When the "access ends" date is reached, the system deactivates the employee's access automatically (staff and admin account locked, status "Terminated", recorded in the audit trail). The GDPR data actions, by contrast, never run automatically: once a plan's action date is reached, the case appears in the new "Offboarding due" view of the employee overview. There you confirm each action individually - with a preview (which data is affected, including blocking references for deletions) and a clear finality warning. Anonymize irreversibly overwrites all personal fields and deletes bank, tax and family data (the employment history is retained in anonymized form); Delete removes the employee including linked personnel data entirely; Export & delete downloads a data export as a file before deletion. Every execution requires the "Manage HR" permission and is recorded in the audit log.

    Open the Knowledge Base →
  • Offboarding: transfer succession with a click

    The succession chosen in offboarding can now actually be carried out via Transfer responsibilities. A click first shows a preview (how many entries would be re-pointed per area), then you confirm in a dialog - with a clear notice that live data is changed and this cannot be undone with a click. What gets transferred: direct reports (new manager), absence approvals (new approver), department lead, open tasks, open/unresolved tickets and document ownership. Nothing is deleted - only the responsibility changes hands; a re-run finds 0 entries (idempotent). For tasks, tickets and documents the successor needs a matching system account - if it is missing, that area is skipped with a note while the others are still transferred. The action requires the "Manage HR" permission and is recorded in the audit log.

    Open the Knowledge Base →
  • Paging in the request list fixed

    With more than one page, the list in the portal could not be paged.

  • Termination dialog now shows the offboarding fields directly

    When terminating an employee you now enter the offboarding details right in the confirmation dialog - no longer only in the separate "Offboarding" tab. The dialog contains (top to bottom): Notice date, End access on (required - drives the automatic access deactivation), Termination effective date, Reason for termination (required), Specify the reasons, and Reassign reports and responsibilities to. As soon as you pick a successor, the further reassignments appear below (absence approvals, department lead, open tasks, tickets, document ownership), each pre-filled and individually adjustable. A note explains that the employee notices no change until the termination date and loses access to SELLERLOGIC afterwards. All entries are saved into the same offboarding plan as the "Offboarding" tab - no second record is created, and access deactivation, data actions and successor reassignment work unchanged.

    Open the Knowledge Base →
  • The absence deputy field is now labelled correctly

    On an employee's "Position" tab, the absence deputy field was mistakenly labelled "Approver". It is now called "Absence deputy" and carries an explanatory hint. Stored data is unchanged. For clarity: the manager approves absence requests, the absence deputy covers while the employee is away.

  • Bank details: IBAN is shown (masked) and validated

    The employee overview now reliably shows the IBAN and bank name (a saved IBAN previously stayed empty as "–"). For privacy the IBAN is displayed masked - only the first and last four characters are visible, the rest is covered with \\\\ - and formatted in groups of four. On input, SCS now validates the IBAN (format and checksum) and only saves valid values. IBAN, BIC and account holder remain stored encrypted.

    Open the Knowledge Base →
  • Created contracts are now displayed

    After creating a contract the "Contract data" tab stayed empty ("No contracts") even though the contract was saved - the view evaluated the internal "active contract" flag incorrectly. Contracts now appear reliably; the same fix also applies to Position, Compensation, Time, Leave and Organisation.

    Open the Knowledge Base →
  • Creating a contract works again

    Saving a new employee contract aborted with a server error because an internal mandatory field (notice period) was not correctly filled with its default when creating. New contracts can be saved again; if left unspecified the notice period is automatically set to the default (30 days), and any value you enter is kept.

    Open the Knowledge Base →
  • Editing "Personal data" now shows the saved values

    When opening an employee for the first time, "Edit" in the personal data could show empty fields (e.g. bank details, ID document or insurance data) even though the values were correct in the read view - the edit fields were populated before the data had finished loading. The edit form now reliably picks up the loaded values, so nothing appears wrongly empty when editing.

    Open the Knowledge Base →
  • Empty date fields in the personnel area no longer cause an error

    In several places in the employee area, leaving a date field empty could cause a server error on save, because the empty field was not correctly treated as "not set". Affected were, among others, the contract end date / end of probation (e.g. permanent contracts) and the expiry date in the ID documents. Empty date fields are now reliably stored as empty everywhere - contracts and ID document data can again be saved without these entries.

    Open the Knowledge Base →
  • Nationality: searchable country picker instead of free text

    The "Nationality" field in an employee's personal data is now - like "Country of birth" - a searchable country list based on the international standard (ISO 3166), instead of a free-text field. Just type the country name or code and pick it; this avoids inconsistent spellings. The picker is used consistently across employee management, the create wizard and the self-service change request. Existing inconsistent entries are preserved and normalised to the country code on the next save.

    Open the Knowledge Base →
  • Contract creation: larger documents and clear feedback

    When creating an employee contract you can now upload contract documents up to 25 MB (previously 10 MB), which covers scanned contracts. If a file is too large, a clear message appears immediately and the contract is not created, so no incomplete duplicate contracts are left behind. If the upload fails for another reason, you now see an error message instead of a form that silently stays open.

    Open the Knowledge Base →
  • Permanent contracts without an end date

    For an open-ended (permanent) contract type, the "Contract end" field is hidden - permanent contracts have no end, and the contract can now be saved without an end date.

    Open the Knowledge Base →
  • Absence types now follow the interface language

    Absence type names (e.g. "Urlaub"/"Vacation") are now displayed in the selected interface language across tables and pickers in the Absences area; the type editor still shows the other-language name as a hint in parentheses, since both name fields are maintained there.

    Open the Knowledge Base →
  • Carry-over expiry: default for all absence types + safe cut-off dates + expiry date in the year view

    The carry-over expiry (Holidays → "Carry-Over" tab) has been improved in three places. (1) Default for all types: In the new section at the top you define an expiry rule that applies to every absence type without its own configuration - cut-off date (month/day), maximum carry-over days, and auto-expire. Type-specific configurations still take precedence over this default. (2) Protection against invalid cut-off dates: The expiry day now automatically adjusts to the selected month - an April 31 or February 30 is no longer possible. February 29 remains allowed; in non-leap years, February 28 applies automatically (a note in the form reminds you of this). (3) Expiry date visible: In each employee's year view, the allowance card's info tooltip now shows when the prior-year carry-over expires ("Expires on …") - or the note "Does not expire" if no expiry rule applies.

    Open the Knowledge Base →
  • Employee detail: "Notes" tab works again

    The tab showed an empty area. Notes about an employee can now be entered and saved there as intended.

  • eNPS score explained

    The surveys help page now shows the exact calculation of the eNPS score and response rate, plus ways to improve eNPS.

  • Entitlements: find employees via a search picker instead of free text

    In the "Entitlements" tab, the employee filter is now a searchable picker with live search by first name, last name, or position - instead of typing a name into a text field. The same search picker is also available when creating or editing an entitlement.

    Open the Knowledge Base →
  • Holidays: daily comparison against an official source

    A new verification job compares the stored holidays every night against government-fed holiday data and reports differences for review - nothing is overwritten silently. The check can also be triggered manually per country and year ("Verify against official source").

    Open the Knowledge Base →
  • Municipal holidays with manual assignment

    Holidays that only apply in certain municipalities (e.g. Corpus Christi in parts of Saxony and Thuringia) can now be created as a "municipal holiday" and manually assigned to individual employees in the "Vacation" tab - they never count automatically for the whole region. Manually created holidays and manual assignments are never overwritten by automatic updates.

    Open the Knowledge Base →
  • Nationality change requests now work reliably

    Requests with free-typed values such as "Spanish" could not be approved ("Internal Server Error"). Such values are now validated on submission and automatically translated to the correct country code (e.g. "Spanien", "Spain" or "Spanish" → ES); existing free-text requests are translated automatically on approval. Unrecognizable values get a clear error message instead of a server error.

  • Regional holidays: region as a dropdown + reliable matching

    State or region is now picked everywhere - on the employee, in the holiday calendar and for the approved residence - from a dropdown containing the official regions of all countries (e.g. Thuringia, Catalonia) instead of free text. Existing free-text values were converted automatically. Regional holidays such as World Children's Day (Sep 20, Thuringia), Reformation Day (Oct 31) or the Catalan holidays now reliably count for the right employees.

    Open the Knowledge Base →
  • Security: access to salary data is now logged

    Every read and export access to compensation and payroll data (including salary overviews, salary history, payroll runs, payslips, and DATEV/CSV and email exports) is now recorded in the tamper-evident audit log - with timestamp, accessing person and affected employee. Salary amounts themselves are never written to the log. Nothing changes for you in day-to-day use.

  • State/region and currency as searchable dropdowns

    The state/region and currency fields across the HR area are now searchable dropdowns instead of free-text input - this affects locations, the self-service residence page, the profile, personal details on the employee form, as well as legal entities, cost centers and salary bands. For the region field, just type e.g. "Bavaria" and pick it from the list; for countries without a stored region list, the previous free-text input remains available. For currency, you pick from the international currency codes (e.g. "EUR").

    Open the Knowledge Base →
  • Vacation days can now be edited directly on the contract

    In the employee profile, the "Leave" tab now lets you edit the annual vacation entitlement directly - it is no longer just a read-only display of the contract value. The entry is saved on the active contract.

    Open the Knowledge Base →
  • Vacation entitlement is now derived automatically from the contract

    When SCS creates a yearly entitlement for the vacation type automatically (e.g. on the year's first request or during the carry-over calculation), the vacation days from the employee's active contract now count first, then the assigned policy, and finally the absence type's default value. If you change the vacation days on the active contract, SCS automatically updates the current year's entitlement - but only as long as it still matches the previously derived value; manually maintained entitlements as well as carry-over and used days remain untouched.

    Open the Knowledge Base →
  • Approval principle now selectable per absence type

    Previously the four-eyes principle (approver ≠ requester) for absences was governed company-wide by a single switch. From now on you can additionally set it per absence type: "Default (tenant setting)", "Two-eyes (self-approval allowed)", or "Four-eyes (approver ≠ requester)". You make the choice in the Absence area under "Types" in a type's edit dialog (only relevant when the type requires approval). The per-type setting takes precedence over the company-wide switch - a type set to "four-eyes" always blocks self-approval, a type set to "two-eyes" allows it; the normal approval permission is still required in every case. Applies to absences only (expenses and compensation unchanged).

    Open the Knowledge Base →
  • Approving an absence: now works even without a configured allowance

    An absence request could previously only be approved if an allowance row already existed for the employee, absence type and year - otherwise approval failed with an error. The system now provisions a missing allowance automatically on request and approval: either from the assigned absence policy (days per year) or from the absence type's annual cap. Types with no allowance at all (e.g. sick leave) are still approved without deducting days, instead of failing on a missing row. In addition, the public holidays of a holiday calendar assigned to the employee now count reliably when the absence days are calculated.

    Open the Knowledge Base →
  • Clear message for expired invitation links

    Opening an invitation link from an older email and submitting the form previously showed only "Internal Server Error". Now a clear message appears: the link is invalid or expired - please use the link from the latest invitation email.

    Open the Knowledge Base →
  • Country selection as a searchable dropdown

    Everywhere an address is entered, you no longer type the country as a code ("DE") by hand - you pick it from a searchable list instead: type "Germ", for example, and choose "Germany (DE)". Country names appear automatically in your selected language. The internationally standard country code is still what gets stored. This applies, among other places, to legal entities and locations in HR, to employee addresses and country of birth (in the employee form, in the personal data, and in employee self-service), and to the country picker in the holiday calendar (limited to the supported countries). Optional fields may still be left empty.

    Open the Knowledge Base →
  • Display glitch fixed - status switcher

    In the user menu at the top right, the "Away" option no longer fit fully inside the menu and was cut off. The "Available/Away" switcher is now displayed correctly and completely.

  • Employees: contract type now saves reliably

    When editing a contract, the selected contract type (e.g. "Permanent Full-time") was previously rejected by the system and not saved - this is fixed. When creating a new contract, the same complete value list is now available as when editing (incl. "Apprenticeship"). Existing contracts with old contract types were migrated automatically to the new names.

    Open the Knowledge Base →
  • Employees: ID document scan directly on the ID document

    In the personal details, a scan (PDF/JPG/PNG) can now be uploaded, downloaded and removed directly on the ID document. The file also appears in the "Documents" tab under the new type "ID document".

    Open the Knowledge Base →
  • Employees: probation period in months

    The probation period is now entered as "x months"; the system calculates the end date automatically from the start date and shows both (e.g. "6 months (until 01.02.2027)"). Existing probation end dates were converted back into months.

    Open the Knowledge Base →
  • Fixed: self-service homepage shows upcoming absences again

    On the employee self-service homepage, upcoming absences were not loading due to an internal error - they are now displayed reliably.

  • HR area: modernized, unified controls

    The buttons, input, select and text fields across the entire HR area - including employee administration, self-service, recruiting, performance, compensation/payroll, time tracking, shift planning, absences, workflows and compliance - have been switched to the unified system controls. Operation, appearance and functionality remain unchanged; special views such as the org chart, calendars, recruiting board and history timeline keep their familiar layout.

  • Legal entities, locations & cost centers: "Edit" now shows the saved values

    Opening the edit panel previously showed empty fields; saving then unintentionally overwrote the stored data with blanks. This is fixed - the form now always shows the current record. The edit panel also has its own web address now: the link can be shared, and the browser back button closes the panel.

    Open the Knowledge Base →
  • New: differing place of stay - request temporary or permanent whereabouts

    Employees can now request a place of stay that differs from their registered address - either temporary (with a start and end date, e.g. for a workation) or permanent. The whereabouts is deliberately not directly editable: every request includes a mandatory reason and is reviewed by the responsible manager, who approves or rejects it (four-eyes principle - nobody decides their own request). The employee profile shows the currently effective place of stay with a "Differs from registered address" note and its validity period. All address data is stored encrypted.

    Open the Knowledge Base →
  • New: Sickness package - sick-note requirement, quota and unpaid overflow, configurable per employee

    For sick leave you can now control three things - each individually per employee, with defaults. (1) Sick-note requirement: decide from which calendar day a doctor's note is required - as a default on the absence type, overridable per employee (employee profile → Vacation → Sickness). Affected requests show "Sick note required"; until one is attached, "Sick note missing", after upload "Sick note submitted". (2) Sickness quota: an optional default quota (days/year) on the type; a dedicated per-employee quota row takes precedence. (3) Overflow → unpaid: once the quota is used up, excess days are automatically marked unpaid on approval (on the request, in the year view and in the payroll export) - on by default for sickness types, switchable off per employee; when off, the hard quota limit applies again. The cascade applies everywhere: employee value over type default over tenant default; an empty field inherits and shows the inherited value as "Default: …".

    Open the Knowledge Base →
  • Passkeys now for every employee - password-free sign-in

    Passkeys (fingerprint, face recognition, or a hardware security key) were previously only available to platform accounts. From now on, every employee can create their own passkeys in the profile under "Two-Factor Authentication" - each with its own device name - and sign in directly on the login page via "Sign in with passkey", with no password. Sign-in works either with an email address entered beforehand or without one at all (your device then lists the matching passkeys to choose from). Your password always remains available as a sign-in method; passkeys are an additional, convenient option and can be removed again at any time.

    Open the Knowledge Base →
  • Time tracker quick access in the header

    The top right now shows a "+" icon that leads directly to the time tracker. Green means automatic capture is running; grey means no active capture. The former floating "Track time" widget in the bottom right corner is gone. The linked transparency page in the time tracker explains what is captured.

    Open the Knowledge Base →
  • Time tracker: "Automatically captured" list

    The time tracker's day view now shows which items (tickets, companies, contacts, tasks) the system registered activity on for you that day - aggregated per item, with total duration and a direct link to the item. Activity below the 2-minute threshold (which does not yet create a suggestion) is visible there too, keeping the capture fully transparent.

    Open the Knowledge Base →
  • Time tracker: automatic capture per admin area

    Automatic activity capture now also recognises which admin area (e.g. "Products" or "Orders") you are working in - no longer only on the four detail views ticket/company/contact/task. Only the area name is stored, never contents or inputs. While an item is open or a stopwatch is running, only that one counts - nothing is counted twice. The transparency page explains all rules.

    Open the Knowledge Base →
  • Time tracker: phone calls are captured automatically

    Completed calls from the phone system (and calls completed in the CRM) now automatically appear as captured time for the employee who handled them - with duration and phone number or subject, each call exactly once. Call time takes precedence over area time so nothing is counted twice.

    Open the Knowledge Base →
  • Whereabouts: contract address visible and pre-filled by default - public holidays follow the place of stay

    On "My Whereabouts", a card at the very top now shows your currently effective place of stay with its source ("Registered address from your contract", "Approved request (temporary until …)" or "(permanent)"). When you submit a new request, the form is pre-filled with that location - by default your contract address; you only change what differs. New as well: public holidays and the calendar now follow the place of stay - on days with an approved whereabouts, the public holidays of that country (and, if given, state/region) apply day by day, which affects the year and calendar views as well as the calculation of your absence days. Order of precedence: place of stay before assigned holiday calendar before country from the master data; if no holidays are stored for the place-of-stay country, your existing rules remain in effect.

    Open the Knowledge Base →
  • Interactive tour "Request an absence"

    The absences manual page now offers a Start tour button - it walks you step by step through the real interface with a spotlight.

    Open the Knowledge Base →
  • Request an absence: all types selectable

    The "New absence request" dialog now offers all active absence types - including ones without a fixed annual allowance (e.g. sick leave). For types with an allowance, the dropdown also shows your remaining balance (e.g. "Vacation - 12 days left"). If no type is configured at all, an explanatory note appears instead of an empty dropdown.

    Open the Knowledge Base →

Booking

  • Appointments is now its own product

    Appointment booking used to be a section inside CRM. You now find it as its own "Appointments" entry in the product rail on the left, alongside CRM, HR and Sign. If you only use appointments, you no longer need to open CRM to get there.

  • Full rename to "Appointments"

    Beyond the product name, the technical names now carry the new term too - API paths (/appointments, /store/appointments), database tables, permissions (appointments:…) and the public booking page. Nothing changes in how you use it. If you embedded the booking widget on your website, please copy the embed code once more under Appointments → Widgets.

  • New page addresses

    The pages now live under /appointments/… instead of /crm/booking/…. Please update any saved bookmarks once.

  • What stays the same

    Nothing changes about the features, your bookings, appointment types, staff, or already-embedded booking widgets. An individual booked slot is still called a booking; only the product was renamed.

  • Customers book their own appointments

    The booking page is now a separate, publicly reachable page. Customers choose their topic, a free time slot and enter their contact details there. After booking they receive a confirmation with a personal link they can use to reschedule or cancel the appointment themselves.

  • The embed code is one line

    The code under "Embed code" is now a single <script> call. It inserts the booking form into your page itself and adjusts its height to the content automatically, so nothing gets cut off. Please replace already embedded widgets with the new code once.

    Open the Knowledge Base →
  • Consistent controls across the booking area

    All booking-related pages (appointment list, dashboard, the booking page with services, appointment types, staff, teams, languages, holidays and calendars, plus widgets, workspace and email rules) now use the shared UI-kit building blocks (buttons, input fields, dropdowns). Nothing changes for you in look or behaviour - the update simply makes every area look consistent and behave the same in both light and dark mode.

CRM

  • The call detail no longer flickers while loading

    While a translation ran in the background - for transcripts sometimes for minutes - the whole page flickered. Two effects combined to cause it: the detail panel lays a blurred veil across the entire page, and the pulsing loading bars on top of it forced the browser to repaint everything behind that veil on every single frame. The detail panel now shields its own rendering, and the loading bars no longer pulse. The spinner in the line above still shows that something is running.

    Open the Knowledge Base →
  • Calls: AI analysis and transcript now appear fully translated instead of switching language mid-view

    When opening a call while using a different interface language, the AI analysis first appeared in the call's language and then visibly switched; the transcript stayed in the original language entirely. Both sections now show a loading indicator while the translation runs in the background and appear only once they are complete. In addition, the transcript is now translated as well - timestamps, speakers and jumping to a point in the conversation all keep working. Use "Show original" to return to the original wording at any time; translations are stored and shown instantly the next time you open the call.

    Open the Knowledge Base →
  • Calls: internal routing numbers no longer appear as handler

    Calls that only passed through an internal routing number (e.g. the dial-in number for English-language calls) wrongly showed that number in the "Handler" column. Such numbers are no longer displayed there; short internal extensions (e.g. "1028") remain visible as a hint when no name can be resolved.

    Open the Knowledge Base →
  • Calls: the "Handler" filter now lists all handlers

    In the call list (CRM → Calls) the "Handler" (Bearbeiter) filter previously showed only some staff, and picking one often returned no matches. It now offers every handler actually assigned to calls - including handlers imported from the phone system (3CX) - and the selection reliably filters to exactly that person.

    Open the Knowledge Base →
  • Review links with identifiers in the address are now accepted

    When adding an external review source (CSAT → External Reviews), certain Google Maps links were wrongly rejected as a "suspicious request" because their technical identifiers looked like an attack pattern. The security check now distinguishes more precisely; genuine attack patterns are still blocked.

  • Review requests are now delivered reliably - optionally with all platforms

    Emails triggered via "Request review" previously got stuck in the queue unnoticed and were never sent; this is fixed, and a delivery failure now shows up immediately in the log and the UI. New: with several review sources configured you can pick "All platforms" (the default) - the email then lists the review links of all linked platforms. The request is written in German or English automatically, matching the contact's country.

    Open the Knowledge Base →
  • Shared ticket links with filters work again

    If a filtered ticket view was bookmarked or sent to a colleague, the page could fail with an error whenever a filter was set to "All". Such links now open correctly - "All" simply means "no filter".

  • Block/unblock a caller right from the call view

    The "Block as Spam" button now sits at the bottom right of the call detail and reflects the current state: if the number is already blocked it turns into "Unblock" (with a confirmation), otherwise it stays "Block as Spam". You can see at a glance whether a caller is blocked and lift the block from the same place.

    Open the Knowledge Base →
  • Bug tracker: record bugs, assign customers, publish "Known issues"

    Under "CRM → Known issues" you record reported bugs and assign several affected customers (company and optional contact). Using the update composer you write updates with a separate customer-facing text and internal note, and set the status. Selected bugs are published to the public portal page "Known issues" (only with a customer-safe title). Bugs classified as critical stay hidden from the public until they are resolved - only affected customers see them confidentially in "My reports". In the customer portal your customers report bugs themselves and follow their reports; notifications for affected customers can be unsubscribed per report.

    Open the Knowledge Base →
  • Call AI analysis now in your language

    A call's AI analysis (summary, topics, buying signals, objections, follow-up reason) has so far been generated in the language of the conversation. It now appears automatically in your interface language: if the conversation language differs, the text is translated once when you open it and cached; a "Translated from …" hint shows the original language, and one click shows the original. If your language is not (yet) available, English is used as a fallback. Value-neutral fields (sentiment, intent, quality) were already translated.

    Open the Knowledge Base →
  • Customer portal: public roadmap & passwordless sign-in

    Your customers can now use a dedicated portal to view the published product roadmap (grouped by status) and the release archive (by quarter) - the roadmap is visible without signing in. For personal features a customer signs in via a sign-in link: they receive a 6-digit one-time code by e-mail (valid 15 minutes), with no password. In the profile they can set display name, language and notifications about their own requests, and export their own data.

    Open the Knowledge Base →
  • Customer portal: votes & comments only for published roadmap cards

    Signed-in portal customers could fetch the votes and comments of a roadmap card even when the card was not yet published (a draft). Fetching is now restricted to published cards - just like voting and commenting already were - so unpublished cards are no longer visible to customers. Nothing changes in your usual workflow.

  • Number blocking now reliably reaches the phone system

    Blocking a number via "Block as Spam" is now correctly forwarded to your 3CX phone system - previously the block stayed stuck in "pending"/"error" due to a wrong API call and never took effect on the system. Blocked numbers are now submitted consistently in international format (e.g. +49…) so the system recognises them reliably.

    Open the Knowledge Base →
  • Roadmap portal: feature requests, voting & comments

    Signed-in portal customers can now submit feature requests (with selectable visibility: private/company/public), vote on ideas and roadmap cards (Critical/Important/Nice to have) and join the discussion. In the admin area under CRM → Roadmap portal you review submitted requests (filter by status, visibility and company), link them to exactly one roadmap card via a wizard (three outcomes; votes are transferred to the card), decline them with a reason and comment officially as SELLERLOGIC. Permissions: "Manage/Moderate Roadmap Portal".

    Open the Knowledge Base →
  • Safer rendering of email and product content

    Displaying HTML content in the ticket view (incoming emails, translation preview), the activity timeline, help articles and the product preview has been hardened: active content (scripts and the like) is reliably removed before the text is shown. Nothing changes visually for you - content appears as usual, just safely.

  • Block callers as spam (3CX blacklist)

    From the call detail view you can now block a number with a single click on "Block as Spam" (with a mandatory comment). The number is added to the blacklist of your 3CX phone system and additionally recorded for auditing - with a comment, the blocking employee and the timestamp. Under "Calls → Blocked Numbers" you manage all blocks and can unblock numbers again (the history is retained). If 3CX is temporarily unreachable, the block is still saved locally and can be re-synced later. Permission: "Manage telephony".

    Open the Knowledge Base →
  • Company timeline: subscription events now in chronological order

    In a company's timeline (tab "Timeline", filter "Subscriptions"), subscription events did not reliably show the newest entry on top - active subscriptions floated up because of their future end date, and entries appeared grouped by product. The timeline now sorts subscription events by when they actually occurred (newest first). The date shown per entry (the subscription's start/end date) is unchanged.

  • New review source: Capterra

    Under "External Reviews" → "Sources" tab you can now add Capterra as a source. Just paste the Capterra product address (e.g. capterra.com.de/software/1077726/SELLERLOGIC) - the product identifier is picked up automatically. Individual reviews are fetched via a secured browser request, as with Google Maps.

    Open the Knowledge Base →
  • Adoption metrics explained

    The Adoption Analytics, Content Analytics, Guides and Surveys pages now explain how the HEART score, completion rate/guide health, quality indicator and NPS/CSAT scores are calculated - including value ranges, thresholds and concrete improvement tips.

  • AI reply drafts now know the official help pages

    The draft button in the ticket reply now additionally draws on the help-center articles (support.sellerlogic.com, all languages). Matching articles feed into the suggestion and appear beneath the draft as clickable sources; where useful, the suggested reply links the article directly for the customer. The knowledge base is synced with one click in the support settings ("AI" tab).

    Open the Knowledge Base →
  • Calculated values explained

    The CRM manual pages now explain exactly how the lead score, customer health & adoption, CSAT/NPS, call and ticket quality, MRR/ARR/churn, the routing score and the sync error rate are calculated - with factors, ranges, refresh timing and concrete levers to improve them.

  • Call search finds phone numbers in any format

    The search under "Calls" (list and analytics) now finds numbers regardless of notation - "+49 176…", "0049176…", "0176…" or with spaces/dashes - and also supports partial search (e.g. just the last digits). For outbound calls the dialed number is now searched too, and an error that temporarily made the search return no results at all has been fixed.

    Open the Knowledge Base →
  • Company view: "Products & Subscriptions" now shows every subscription plan

    Besides the products in use, the tab now also lists each individual subscription plan - including trial and freemium plans without revenue, which could previously be missing. Every plan shows its type (Trial/Freemium/Paid), its period, and a "Scheduled" marker for follow-up plans that only start in the future. In the history, "Subscription started" entries now carry the plan name and the actual start date, so multiple plans of the same product can be told apart.

    Open the Knowledge Base →
  • From a contact straight to the company

    In the contact detail view, clicking the company name now opens the company detail view as an overlay - without leaving the current page. The reverse direction (company → contact) already worked this way.

    Open the Knowledge Base →
  • Groundwork for the roadmap portal and bug tracker

    SELLERLOGIC SCS is preparing a customer portal where SELLERLOGIC customers can view the product roadmap and report bugs; support can record bugs and tag the affected customers, who are then informed about updates. This release ships the technical groundwork (data model, the new “Roadmap Portal” and “Bug Tracker” permissions, product list). Nothing changes in the interface yet - the screens follow in upcoming releases.

  • Owner filter on calls now available for all roles

    Under "Calls" → "More filters", the "Owner" dropdown was previously empty for staff members without team-management rights. The list is now populated for every staff member with CRM access; if it ever fails to load, a hint appears instead of a silent empty list.

    Open the Knowledge Base →
  • Review links & "Request review"

    Every review source (Sources tab under External reviews) can now store its public review link - the URL where a customer leaves the review (Google, Trustpilot, Amazon App Store, …). All stored links are visible at a glance on the source cards. New on the contact: the "Request review" quick action sends the contact a friendly email with the review link of the selected platform; the send appears in the contact timeline, and SCS asks first before sending again within 30 days.

    Open the Knowledge Base →
  • Tickets are now truly auto-assigned

    New support tickets automatically get an owner - based on skills, language and current workload. A technical defect had silently prevented automatic distribution until now. Also new: in the support settings ("Routing Rules" tab) you define an agent pool - only these staff members receive tickets - and "Assign all open tickets now" distributes the existing backlog in one click (oldest first, max. 200 per run).

    Open the Knowledge Base →
  • Work on tickets without a language barrier

    Every staff member can now read a ticket's entire conversation in their own interface language with one click (translate icon in the conversation header) - each message carries a "Translated from …" note, and previously translated content loads instantly. Simply write replies in your language: if the customer's language differs, SCS automatically shows a preview of the translated reply before sending ("Send translated" / "Send original").

    Open the Knowledge Base →
  • CRM: modernized, unified controls

    Buttons, input and select fields, toggles and tables across the entire CRM area (Tickets & Support, Pipeline, Calls & Analytics, Product Adoption, Reputation & Automation) now use the shared system building blocks. The look is more consistent; behavior and features are unchanged.

ERP

  • Cashflow overview no longer crashes while loading

    The overview on the cashflow page could break into a blank page while the figures were still loading. The cause was a calculation running too early. The page now builds completely in every case.

  • Import now declines oversized files up front

    Product imports now enforce sensible limits - at most 10 MB per file, 50,000 rows, 200 columns, and 64 KB per cell. Files that exceed a limit are rejected with a clear message and nothing is imported, so a single very large upload can no longer slow down the shop. Simply split the file into smaller parts and import them one after another.

  • Risk, supplier rating & Mirakl metrics explained

    The Vendor KYC, supplier management and sales channel help pages now explain how the risk score, supplier overall rating and Mirakl performance metrics are derived and how you can influence them.

  • Technical refresh of the ERP interfaces

    Inventory & stock (warehouse, wave picking, stocktaking, serial/batch tracking, location groups, routing, channels, shipping carriers), accounting & bookkeeping (chart of accounts, journal, balance sheet, P&L, DATEV/lexoffice export, e-invoicing, banking, receipt capture, anomaly detection), procurement (suppliers, purchase orders, goods receipts, quotes) and the pricing & analytics tools (price recommendations, tiered pricing, cashflow, demand forecasting, liquidity, scenario planning, Mirakl) were migrated internally to the unified SCS UI kit. Behaviour is unchanged - in some places forms, tables and buttons now look a little more consistent. Special visualisations such as charts (cashflow, forecasts), timelines (purchase orders, quotes) and the payment calendar deliberately keep their custom layout.

Settings

  • Every product in one place

    The quick search (Cmd + K or Ctrl + K) is now also your entry point to every product. With nothing typed it shows your favourites, then every product grouped by topic - Sell, Customers, Operations, Workplace, People, Platform - and finally the entry points into the handbook. Each product appears with its icon, name and one sentence on what it does. You can also open the window with the grid icon at the top of the left icon bar.

    Open the Knowledge Base →
  • Favourites instead of a fixed quick-access list

    The previously fixed quick-access list has been replaced by your own favourites. As long as you have not set a favourite, the section is not shown at all. You still set favourites with the star in the menu of the respective product. The list of recently visited pages has been removed.

  • Overlays darken instead of blurring

    Drawers, dialogs and the quick search now consistently place a darkened background behind them. The previous blur made the image flicker while scrolling in tall windows.

  • Products are distinguishable at a glance

    Several products carried very similar icons. Shop, ERP, Documents, Channels, People and MaaS now have their own, and in the product overview each gets its own colour.

  • Quick search now finds content too

    The quick search (Cmd + K or Ctrl + K) used to match page names only. It now also shows which areas have something to say about your keyword, and below that the matching manual pages with the match highlighted. The three groups are visibly separated.

    Open the Knowledge Base →
  • Search now finds products too

    Type a keyword and matching products appear as their own group, ahead of the page results. Someone searching for "People" usually means the whole area, not one page inside it.

    Open the Knowledge Base →
  • Sign-in asks for your account first

    If you open the sign-in page through the general address instead of your company's own, you are now asked for your account first and then forwarded to your own sign-in page. Previously a form appeared there that could be submitted but could never work. Your account is remembered and prefilled next time.

    Open the Knowledge Base →
  • Adding a passkey works again

    Creating a passkey in your profile often showed "Registration challenge expired or not found" and the passkey was not saved. The cause was an internal short-term store that the servers did not share - depending on which server answered your request, the enrolment was lost between its two steps. You can add passkeys as intended again.

    Open the Knowledge Base →
  • New product name: SELLERLOGIC Commerce Services

    The platform is now called SELLERLOGIC Commerce Services (short: SCS). The former name "V3NDR" has been replaced throughout the interface, the manual and the e-mail templates. Only the name changes; your data, settings, logins and addresses stay exactly as they are, and there is nothing you need to do.

    Open the Knowledge Base →
  • Sign-in: session protection is reliable again

    SELLERLOGIC SCS now determines the address you connect from consistently everywhere. It previously used two different methods, which made your session's protection raise an alarm although nothing had changed - and once blocked sign-ins in July. Day to day nothing changes for you, but security limits such as "too many sign-in attempts" now apply per user again instead of to everyone at once.

    Open the Knowledge Base →
  • Two-factor confirmation: a clear message instead of an error page

    For security reasons, confirming with a passkey or recovery code is only valid for five minutes. If it took longer, SELLERLOGIC SCS used to report a technical error and any further input had no effect. You now see the notice "Confirmation took too long - please sign in again", and the sign-in form resets automatically so you can start over right away.

    Open the Knowledge Base →
  • Permissions: you can only grant what you hold yourself

    When creating or editing roles, assigning roles, and setting overrides, SCS now checks that you do not grant a permission your own account lacks. The highest roles "Owner" and "Super Admin" can also no longer be handed out through normal team management (Super Admin only by an Owner/Super Admin, Owner only by the Owner). Owners and Super Admins are exempt from this ceiling. This closes a gap that could have let team managers escalate their own rights.

    Open the Knowledge Base →
  • Sign-in: issue fixed

    A brief issue that prevented signing in to the administration area has been fixed. You can sign in as usual again. The "Last login" field on your profile page again shows your most recent sign-in time.

    Open the Knowledge Base →
  • "Reset access" without re-onboarding

    When an administrator resets a staff member's access, the staff member now receives an email to simply set a new password - instead of filling in the full onboarding form (name, profile) again. Account and profile remain unchanged; active sessions and two-factor data are still reset for security reasons.

    Open the Knowledge Base →
  • Company address: country as a searchable dropdown

    You now pick the company address country from a searchable country list - type "Germ", for example, and choose "Germany (DE)" - instead of the previous short choice (DE/AT/CH). The internationally standard country code is still what gets stored, and any country already on file is preserved. The intra-community VAT setting (seller's country of establishment) still uses the same value.

    Open the Knowledge Base →
  • Settings: modernized, unified controls (part 1)

    Usage and functionality unchanged.

  • Settings: modernized, unified controls (part 2)

    Usage and functionality unchanged.

  • Help center & "?" button launched

    SCS now has a built-in handbook. Use the "?" button in the top-right or the "Help" menu entry to open the matching explanation for any page - with search across all areas and thematically grouped area pages.

    Open the Knowledge Base →
  • Manual in 44 languages

    The complete manual is now available in 42 more languages in addition to German and English (machine-translated, English as the base). The language automatically follows your profile language setting.

    Open the Knowledge Base →

Shop

  • Blog articles in the shop open reliably

    An article could break into a blank page while loading. Fixed.

  • The error page stays usable even when translations fail to load

    Until now the page meant to show an error could itself crash in exactly that situation. It now shows a message even without translations.

  • Security: social sign-in protected against account takeover

    When a customer signs in with Google, Apple, Microsoft, or GitHub and an account with the same email address already exists, the social account is now only linked to the existing account automatically if the provider confirms the email address as verified. Otherwise the customer is asked to log in with their password and link the provider themselves from their account settings. This prevents taking over someone else's account via an unverified email address. Brand-new accounts are still created as usual.

    Open the Knowledge Base →
  • Security: shop page content sanitized consistently

    CMS blocks (including text, image-text, accordion, and free-form HTML), blog articles, and legal pages (terms, refund policy, privacy, etc.) are now consistently sanitized when displayed in the shop. Nothing changes in look or usage for you.

  • Stronger safeguard for payments via your own merchant account

    Payments made through Stripe Connect or Mollie Connect are now only recorded as successful, captured, or refunded once the payment provider has actually confirmed it. If the technical connection isn't fully set up, the payment now fails visibly instead of being incorrectly marked as paid.

  • Bounce rate & order metrics explained

    The Email Bounces and Orders manual pages now show exactly how bounce rate, order totals and the fraud-risk score are calculated - and how to improve them.

  • Faster shop loading

    The customer-facing shop now loads only the language actually needed instead of all 44 language packs at once - the first page load transfers about 60% less code. When switching the shop language, the respective language pack is loaded automatically; functionality and usability remain unchanged.

  • Country as a searchable dropdown across more areas

    In further areas you now pick the country from a searchable list instead of typing the code by hand - type "Fran", for example, and choose "France (FR)". This covers draft-order addresses, tax rules (the rule's country), the embargo country list and country check in sanctions screening, and the Google Shopping feed's target country. The internationally standard country code is still what gets stored, and values already on file are preserved.

    Open the Knowledge Base →
  • Technical refresh of the shop screens

    Products, orders, customers, coupons, discounts, shipping, payments, domains and subscriptions were switched internally to the shared SCS UI kit. How you use them stays the same - forms, tables and buttons may look a touch more consistent in a few places.

  • Interactive tour "Create a product"

    The products manual page now offers Start tour - a guided step-by-step walkthrough directly in the interface.

    Open the Knowledge Base →

Marketing

  • SEO overall score demystified

    The SEO Suite help page now explains exactly how the overall score is built from detected issues and how to improve it.

  • Email templates & block builder: modernized, unified controls

    The buttons, input and select fields in the email template editor, the block builder, the send log and the translation matrix have been switched to the unified system controls. Operation, appearance and functionality remain unchanged.

  • Marketing: modernized, unified controls (part 2)

    The buttons, input and select fields in Ads, Content, Marketing Analytics, Marketing Dashboard, SEO Meta, SEO Reports and Social Media have been switched to the unified system controls. Operation and functionality remain unchanged.

Tasks

  • Asana import more resilient to server restarts

    If a running Asana import is interrupted by a restart, the system now detects this automatically and releases the import again - the next run resumes from the last saved checkpoint. Administrators can also now explicitly abort a stuck import run.

  • Modernized controls in the Tasks area

    Buttons, form fields, and tables now use consistently designed building blocks. Operation and functionality remain unchanged.

Documents (DMS)

  • Document management: modernized, unified controls

    Behavior and functionality unchanged.

Sign

  • Consistent controls in SCS Sign

    All electronic-signature pages (envelope list, detail view, the create-and-send wizard, templates, settings and "My signatures") now use the shared UI-kit building blocks (buttons, input fields, dropdowns). Nothing changes for you in look or behaviour - the signing wizard with drag-and-drop field placement stays the same. The update simply gives a consistent appearance in both light and dark mode.

Marketplace

  • Marketplace pages modernized

    Lists now keep page and sorting in the address bar - views can be shared as links and the browser back button works as expected. Forms show input errors consistently next to the field.