Here is a look at recent updates landed across the Ferni codebase. We have made improvements to web accessibility, phone layouts, network error handling, and search discoverability.
Web interface and accessibility
In #2034, landed fixes for text contrast across light and dark themes. Muted colors and opacity combinations previously caused text to fall below AA contrast requirements. The PR also replaces flag emojis in language lists with plain text labels.
In #1523, fixed layout behavior on the connect button when text is zoomed to 200%. Instead of absolute positioning that caused labels to clip, the status text now sits inside a flex container with screen reader labels intact.
In #2110, landed a fix for the progress ring in the journey pill. A CSS rule applied rotations to all child SVG elements, turning the inner heart icon sideways. Updating the selector keeps the heart upright and centered.
In #1704, landed changes that remove streak counters, percentage labels, and canned fallback responses across menu panels. When a network request fails, panels now show an honest error instead of fake data.
In #1811, Memory Lane and Team Insights now present explicit error messages when server requests fail. Previously, a failed request showed an empty state, making network issues look like missing content.
Smoother navigation and phone experience
In #2139, landed layout fixes for mobile browser displays. Safe-area padding rules previously caused the main container to exceed screen height on notched phones, preventing scrolling. Setting height to 100% on the app container allows proper scrolling.
In #2109, landed instant loading shells for menu panels that fetch remote data. Tapping a panel opens a responsive dialog shell right away so the interface never feels frozen. The panels now use standard dialog accessibility properties, and pressing Escape returns focus to the menu trigger.
In #2102, fixed motion detection logic on phones. Calculating total acceleration without subtracting gravity caused normal tilt angles to trigger shake chimes. The new detector isolates actual device acceleration and disables shake surprises while a call is active.
In #1676, fixed phone number updates inside contact settings. Forms previously re-rendered before reading input, causing numbers to save as empty strings. Typed entries now persist across re-renders, normalize to E.164 format, and initiate SMS verification codes correctly.
In #1647, added new visual moods for the homepage avatar. The avatar settles between 21:00 and 04:59 local time with lowered eyelids and warmer lighting. People returning after more than 6 hours see a brief greeting look.
Feeds and developer discoverability
In #2010, landed RSS feeds at /blog/feed.xml, a developers sitemap at /sitemap.xml, Twitter cards, and IndexNow key hosting at /indexnow-key.txt. Because blog posts publish automatically, these changes ensure search engines index new updates cleanly.