Release notes · since 1.4.3
PsychPod 1.5.0
A detailed record of what changed in the website and mobile apps, what is ready to try, and what still needs testing.
Availability updated .
Where this release is available
- Website
- Live
- The 1.5.0 website changes are available now.
- iOS
- TestFlight ready
- Version 1.5.0, build 80, is available to the EarlyBirds testing group.
- Android
- Internal testing ready
- Version 1.5.0, build 98, is available to Google Play internal testers.
- Public mobile apps
- 1.4.3 remains public
- The public 1.5.0 mobile rollout is being prepared.
Testing availability does not mean the public App Store or Google Play release has changed. Check-in saving has been confirmed in a user-reported phone test. Broader device coverage, History after reopening, and sound and haptic behavior remain part of testing.
Mobile design and navigation
The mobile app has a clearer layout, with a dedicated place for trends and easier access to the tools you already use.
A consistent screen design
Home, Check-in, Insights, History, Profile, sign-in, onboarding and Settings use rounded tinted tiles, clearer type, consistent spacing and more readable supporting text. The final dark palette retains navy surfaces and blue accents; a warm light theme is also available.
Five primary tabs
Home, Check-in, Insights, History and Profile form the main navigation. Insights holds charts, period statistics, summaries and habits, while History keeps the chronological record of your check-ins.
A Profile hub and clearer shortcuts
Profile connects to editing, Settings, Friends, Messages, notifications and badges. Home has labeled Friends and Messages shortcuts, including the unread-message badge. Existing routes and deep links remain available.
Existing tools remain accessible
Journals, voice notes, tracked habits, exports, multi-factor authentication, consent and account deletion remain accessible through the updated navigation.
Your theme choice is preserved
Fresh installs start in dark mode. An existing explicit light preference is retained, and a late stored-theme read cannot overwrite a new choice you make in Settings.
Branding and calm background movement
Home includes the atom mark, while sign-in uses transparent artwork. Gentle horizon waves and limited scroll movement are decorative and do not intercept touches or screen-reader input. Reduce Motion or unresolved motion preferences keep them still.
Readable questions and accessible controls
Layouts adapt more carefully to narrow screens, larger text and longer answer labels.
Answer tiles grow with their text
The tallest answer label determines the height of the response tiles for the current question and layout. Compact choices switch between two and three columns based on width and text size, helping wrapped answers remain readable.
Questions scroll without losing the controls
Question content can scroll while progress, navigation and help remain visible. Moving to another question returns to its heading and places accessibility focus there.
Navigation labels have room to wrap
Tabs reserve space for the tallest label, and headers can shrink or wrap at larger text sizes. History period controls wrap and have larger touch targets.
Notification settings stay reachable
The preferences screen scrolls within safe areas so enlarged text does not hide the Save action.
Check-in saving and recovery
The save flow has clearer progress, bounded waiting and a retry path that retains the original check-in context. The fix passed regression tests, and a successful check-in was reported in a physical-phone test on 2 October.
Visible saving, timeout and retry
Saving explicitly shows its progress and has a 15-second deadline rather than waiting indefinitely. Unconfirmed answers and retry state remain available when you switch tabs within the open check-in flow. A late timeout does not open an alert over Profile.
An uncertain save is described accurately
“Save not confirmed” distinguishes missing client confirmation from a proven failed write. The server may have stored an entry even when the app did not receive confirmation. Success feedback waits for a confirmed entry ID.
Retries keep the original day
A retry retains the original recorded time, timezone and local day. Crossing midnight while retrying does not turn that reflection into a new day’s check-in or detach its journal and voice notes.
Fewer authentication delays during saving
Saving uses the existing session identity without an extra remote user lookup. Native authentication and database requests use a dedicated transport with direct response handling to address a reproduced stall after a successful server response. Writes are not automatically repeated after a transport problem.
Results and authentication have their own deadlines
Native authentication requests are bounded to 10 seconds, including response-body stalls. Loading a saved result has a separate 15-second deadline and retry action.
Private screens keep strict session boundaries
Routine same-account refresh and resume preserve verified questions. Account changes, expiry, failed verification, sign-out and changed authentication assurance clear private access. Late responses cannot reopen an old private screen.
Diagnostics without reflection content
Save diagnostics record stages, timing, status and app state, without answers, row contents, tokens, request URLs or user identifiers.
History, Insights and Profile reliability
Loading failures are separated from empty data, and older requests cannot replace newer results.
Errors have a retry action
History and Insights show real loading errors instead of claiming the log is empty. Existing same-account data stays visible during a failed refresh. Main check-ins and optional attachment indexes can settle independently.
All-time History includes all owned entries
All-time reads paginate beyond the previous 365-entry limit. A failed page or account transition rejects the incomplete result rather than silently presenting it as the full history.
Newer selections stay in control
An obsolete period or focus request cannot overwrite the result for a newer selection.
Missing mood answers stay missing
Insights no longer invents a midpoint for a missing mood answer. Valid zero-valued scores are retained where the score allows them.
Profile loading and saving settle clearly
Profile reads have a 15-second deadline and cancel when the screen loses focus. Loading, errors and retries settle visibly. A successful profile update confirms without waiting for optional badge reconciliation.
Journals, voice notes and exports
Attachments follow the confirmed check-in day, and sharing stays tied to the account and request that created the export.
Attachments use the saved reflection’s day
Journal and voice attachments, and the saved Analysis screen, use the confirmed check-in’s canonical day. This includes a retry that finishes after midnight.
Pending journal notes remain account scoped
Journal requests have deadlines and cancellation. Separate account queues prevent one stalled request from indefinitely blocking another account’s local operation. A failed sync preserves unconfirmed pending notes for that account.
Voice recording has a clearer Stop path
Stop uses the recorder’s live state. A successful stop releases temporary sound and haptic suppression; a native stop failure keeps Stop and retry available.
Exports cannot follow a stale account
History sharing verifies the originating account and current screen request. Switching accounts or replacing the request prevents an obsolete export from opening.
PDF sharing uses the fresh output
Only the file returned by the current print request is shared. A failed rename cannot fall back to an old PDF with a fixed filename from a previous export or account.
Comparable trends and calendar history
Formula revision 5.0.2 makes Quick and Full history comparisons use the same questions while preserving the richer detail in a Full Reflection.
The same seven questions across check-in modes
Charts, period summaries and personal comparisons use sleep quality, mood, energy, emotional control, focus, loneliness and contentment: the seven raw questions shared by Quick and Full. Switching modes therefore does not change the ingredients of a trend.
Missing answers are not filled in
Overall comparisons require all seven shared answers on an included day. Individual area arrows use available shared-question observations. Missing values stay missing, and stored Full scores are not substituted into the comparison series.
Daily results retain their full scoring
Today’s result, detailed saved answers and personal exports retain complete-answer scoring. Existing raw weights and daily scoring curves are preserved. A comparison score can consequently differ from a Full Reflection result.
Recorded local days survive travel
History uses the saved local day first, then the recorded timezone, with a viewing-timezone fallback only for older entries that lack usable day information. Correctly recorded observations do not move because you later view them elsewhere.
Two local days can share one UTC day
Database changes remove an obsolete UTC replacement rule. Distinct local days can coexist, and modern same-day updates retain the entry ID and its journal or habit references.
Clearer summary and methodology wording
Summaries omit invalid scores, explain when there are too few complete observations and describe spread in score points. The methodology withholds unsupported next-day associations and explains repeated-observation and multiple-pattern limits.
More honest scoring provenance
New entries can record the client’s scoring version, revision, timestamp and mode; historical metadata is not guessed. The research preview uses only earlier distinct nights and labels saved scores clearly. This is comparability work, not clinical validation or a live behavior predictor.
Support choices and community
Support is available by choice, with a broader directory and optional peer conversation kept separate from professional or emergency care.
Support now, or after saving
Choosing support now opens resources before further questions or saving while retaining the unfinished check-in. Choosing support soon offers options after saving. Symptom combinations alone no longer force an interruption, and manual help stays accessible while saving.
An optional offer after each check-in
Completed check-ins include a small support and community card that you can choose to use. Professional resources do not require joining a community.
Optional Discord conversation
The existing PsychPod Server invitation appears as a separate peer-conversation option. Discord is a separate service, with no promise of emergency care, guaranteed replies or confidentiality. Invite links do not pass your check-in, journal or account details and suppress referrers.
39 listings across 32 countries or areas
The shared directory has expanded across all nine regional groups and includes two worldwide directories. Country filtering avoids presenting a local number as a service for a whole continent; worldwide options remain available as a fallback.
Clearer service details and channels
Listings distinguish crisis support, emotional support, health advice and clinical appointments. They include eligibility, hours, languages, official links and review dates. Corrections include TELL Japan, iCALL India, HMC Qatar, SADAG South Africa and the WhatsApp channel for Singapore CareText.
Review status is visible and actionable
Listings needing review pause call and SMS actions. Retired listings are omitted, and correction links identify the listing without requesting personal health information. Source checks can flag moved or unavailable pages; that does not prove a service has closed. Review dates remain historical, not a new live service audit.
Motion, sounds and haptics
Optional feedback is more consistent, with independent controls and fewer repeated cues. Device feel and delivery still need testing on the exact mobile builds.
Short question transitions
Next and Back have directional vertical transitions, accessibility focus placement and cancellation when the screen blurs or closes. Reduce Motion is respected.
Gentle sound and haptic cues
Prepared cues cover beginning a check-in, answers including the final answer, deliberate scroll completion and refresh, verified app entry, navigation, confirmed results, completion, badges and unread or foreground messages. Routine token refresh and duplicate renders do not replay entry tones.
Distinct check-in and movement feedback
Begin and Quick Check-in use a short single pulse. Full Reflection uses a slightly longer two-pulse pattern. Answering gives a small response; deliberate list-end and refresh gestures use a brief paired pattern. Reduced Motion simplifies paired patterns, and repeated scroll events are throttled.
Separate controls and a preview
Sound, Haptics and Animation have independent Settings controls, including a completion preview. Preferences belong to the account on that device or browser; failed loads and saves stay visible and retryable.
Feedback respects context
Cues are bounded and deduplicated, with only the latest unread message announced during catch-up. They account for sound settings, silent mode, background state, reduced motion and voice recording or playback. Support flows avoid celebratory cues, and foreground cues avoid competing with OS alerts.
A bundled gentle notification tone
A notification WAV is configured for iOS local alerts and newly created Android channels. Remote delivery selects it only for compatible binaries; older subscriptions keep defaults. Existing Android channels remain under OS and user control, including blocked channels.
Platform limitations remain
Browser audio and vibration are best effort and may require a user gesture. Timing patterns do not move a phone’s motor across its body. These changes do not claim verified physical sound quality, haptic feel or silent-mode behavior.
Notifications and shared-device privacy
Preference saves, read actions and push delivery have stronger account boundaries and clearer failure states.
Preferences stay with the starting account
Cached preferences and configured markers are account scoped and are not read while signed out. A save binds the session that started it, preventing an account switch from redirecting an in-flight change.
Failures do not look like complete saves
Legacy fallback is limited to explicit missing-function responses after an identity recheck. Other errors remain retryable, and partial legacy saves do not claim that all preferences were saved.
Read and mark-all actions verify persistence
Native and browser actions confirm owner-scoped updates and affected rows. Mark-all checks the authoritative remaining unread count so success does not reverse on the next refresh.
Push permission is separate from registration
Browser push registration reports a server-registration failure and offers retry. Granting browser permission alone is not reported as enabled delivery.
Sign-out attempts notification cleanup
The sign-out flow attempts bounded server disabling plus browser unsubscribe or native token removal before clearing authentication. Failures remain retryable where possible. A session already missing cannot authorize server-row cleanup, and device delivery still needs acceptance testing.
Catch-up and delivery respect account state
Unread catch-up is shared across rapid remounts, has deadlines and backoff, and rejects stale or account-crossing results. The deployed delivery gate stops pushes to missing or deleting recipients and stops on profile or preference errors rather than overriding opt-outs.
Sign-in, first use and saved preferences
Sign-in routing and first-use prompts are more coordinated, and replaying onboarding preserves choices you do not change.
One owner for sign-in routing
Root session verification controls navigation after email or OAuth sign-in, reducing conflicting redirects while retaining multi-factor authentication enforcement.
MFA screens reflect verified account state
The challenge form appears only after confirming a verified factor is required. Pending checks show loading; failed verification offers retry or sign-out instead of implying that an unenrolled account enabled MFA.
Optional prompts wait for a useful moment
Tours and notification prompts follow legal acceptance, onboarding and the first useful interaction or check-in. They do not interrupt an active reflection.
Shorter web onboarding
Reminder and optional research choices move to Settings rather than being bundled into web onboarding completion. Language and completion are saved explicitly.
Replaying onboarding retains untouched choices
Native replay starts at the first step with current preferences and writes only changed fields. Untouched reminder times, language, gender and research choices remain intact. Replay alone does not request notification permission or reschedule reminders.
Settings recovery and clearer localized copy
An initial Settings error has retry and Profile recovery; a failed same-account refresh keeps the previous snapshot. Existing languages cover the new routes, feedback controls, support and recovery states. Deletion copy reflects the request and cancellation window rather than promising immediate erasure.
Website loading and privacy
The website shows real signed-in state more carefully and makes public content visible sooner.
A real homepage snapshot when signed in
The public homepage can show your current-day check-in after authentication and MFA checks. Visitors without an account see labeled examples. Empty, error and verification-required states provide appropriate actions instead of invented scores.
Private data stays out of public page caching
The snapshot loads separately with private, no-store responses. It is not embedded in static public HTML or CDN cache, and outdated or account-changing responses are suppressed.
Main text appears immediately
Homepage text no longer starts invisible while animation begins. The blog heading and introduction can appear before the article catalogue finishes loading; catalogue failures remain explicit.
Cookie choices are available in the initial page
Consent controls are included in server-rendered HTML. Returning visitors with current consent hide the panel before first paint. Expired consent does not enable Analytics or Speed Insights.
Less work before the page is useful
Optional monitoring loads later, initializes once and retains privacy settings. Anonymous public requests avoid unnecessary session work, and public language preferences avoid unnecessary browser authentication loading.
Bounded protected-page verification
Protected web authentication and MFA checks have a six-second cancelable deadline and an uncached outage response, while preserving valid refresh cookies. Profile saves and friend actions confirm without waiting for optional badge work.
Administration, database and security maintenance
Behind the interface, this release includes source hardening for exports and moderation, database efficiency changes, and safer build tooling. Individual moderation grants, audit triggers and deletion-helper permissions still need their own live verification; source checks do not establish every backend rollout.
Research access and export boundaries
Research administration requires current MFA, super-admin permission, data-sharing and research consent, and no pending deletion. Exports use private participant mapping, fresh authorized snapshots and validated dates. A 20,000-row limit asks administrators to narrow filters instead of silently truncating; CSV cells are escaped against spreadsheet formula injection.
Authoritative newsletter and moderation actions
Newsletter totals are separate from preview rows, and fresh exports honor active filters. Moderation uses actual resolution fields, verifies updates and supports resolving, reopening and saving bounded notes. The backend hardening source restricts writes and adds review audit metadata without copying note content into audit records.
Database work with preserved permissions
The hardening source restricts deletion and purge helpers to service infrastructure. Badge checks calculate only required prerequisites, timezone work is reused, and 15 supporting indexes cover foreign keys. Authorization helper changes retain distinct public, owner, friend, moderator and administrator paths.
Reliable saved insight priorities
What’s New priorities retain calculation precision in memory but are rounded and bounded for database storage, preventing out-of-range persistence failures.
Build-tool security fixes
Tested URI decoding preserves Expo Router compatibility. The local Forge tooling backport adds strict signature checks, bounded PEM parsing and prototype-safe cookie storage, with recorded provenance and real Expo certificate, signing and CSR regressions. This is tooling maintenance, not a new in-app encryption feature or an official upstream patched release.
More focused regression coverage
Checks cover account isolation, real-SDK request concurrency, native response transport, database behavior, browser flows, accessibility, motion and notifications. Automated results do not replace physical-device acceptance or prove the product has no vulnerabilities.
Known limits and testing
- Unsaved check-in answers can survive tab switches while the app stays open. Durable recovery after the operating system kills the app is still a gap. Save your reflection before force-closing.
- Native phone enrollment and SMS multi-factor authentication remain incomplete or gated. Authenticator-code MFA exists; this release does not add full native SMS send, resend or phone enrollment support.
- A successful check-in was reported in a physical-phone test on 2 October. Further device coverage includes Profile and History after reopening, both reflection modes, and sounds and haptics with different settings.
- PsychPod supports reflection on self-reported wellbeing. Its combined score is not a clinically validated questionnaire, diagnosis, treatment, or prediction of future behavior.
Read how the model works or find support resources. If a save stalls or an entry is missing, contact hello@psychpod.org with your platform, app version and the steps you took. Do not send private journal text or account credentials.