Skip to content

feat: revamp all UI - #60

Merged
hugofnm merged 10 commits into
mainfrom
feature/ui
Oct 4, 2026
Merged

hugofnm merged 10 commits into
mainfrom
feature/ui

Conversation

@hugofnm

@hugofnm hugofnm commented Oct 4, 2026

Copy link
Copy Markdown
Member

oui, c'est vrai je voulais pas que Claude vibecode l'appli
mais putain qu'est ce qu'il est bon en UI/UX

bon désolé la team mais UniceNotes avait besoin d'un peu de modernité !

hugofnm and others added 9 commits October 3, 2026 13:44
Every screen now follows the home screen design: large title header,
rounded cards, tonal icon badges, staggered entrance animations.

Architecture
- shared UI kit in components/ui (Screen, ScreenHeader, Card, ListItem,
  Tile, Sheet, Banner, EmptyState, Skeleton...)
- SettingsContext: every setter persists itself, settings are loaded
  before the first render behind the native splash screen
- CalendarContext: the only place that downloads the timetable; home,
  timetable, widgets and Live Activity share the same data (no more
  double download from home + timetable/deep links)
- services/ade.ts: single ADE client (session, projects, school year),
  shared by the timetable and free rooms services
- withTimeout helper replaces four hand-written timeout races
- theme moved to src/theme with fonts baked in (stable theme objects)
- calendar cache tagged with its ADE code, typed storage keys

Fixes
- remove the JS splash screen: API alerts, update prompt and release
  notes are shown on home, release notes no longer greet new users
- program search is debounced, encoded and ignores stale responses
- changing the ADE school year reloads the timetable
- timetable: French day names, readable text on course colors,
  haptics follow the user setting, Day / 3 days / Week views
- OOBE logo animation no longer writes a shared value during render
- mailto link opened with Linking instead of the in-app browser
- "demo" placeholder id replaced by null (migrated on load)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msb2CCCgWwvLSydhcU2dEk
- remove 12 dependencies never imported (image picker, notifications,
  local authentication, sharing...) and their leftover iOS permissions
- remove the duplicated extra block from app.json (set by app.config.js)
- docs: DATA.md lists the real storage keys, HAPTICS.md the current
  conventions, ERRORS.md removed (error codes no longer exist)
- README: architecture overview, dev build instructions
- .env.example, fix .env being tracked, lint + typecheck CI workflow

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msb2CCCgWwvLSydhcU2dEk
- Native bottom tabs (expo-router NativeTabs): Accueil, EDT, Salles, ENT.
  Liquid Glass on iOS (minimizes on scroll, next class as a bottom
  accessory on iOS 26), Material 3 bar themed with the app palette on
  Android. Free rooms and the calendar only load once their tab is opened.
- ENT services open in an in-app WebView (/browser) instead of system
  browser tabs: progress bar, toolbar, swipe and back navigation, error
  page, external schemes handed to the system, iOS downloads fetched with
  the page session. The route only accepts services from the catalogue.
- Local Expo module modules/web-session keeps that session: WKWebView
  session cookies are saved to a protected file and restored on the next
  launch (iOS), cookies are flushed to disk (Android). Settings can sign
  out of every service, and the data wipe clears it too.
- Quick access: 3 apps pinned from the ENT tab or the browser menu, empty
  slots, and an ENT folder tile with the other apps. Pinned apps also
  become app icon quick actions (unicenotes://app/{id}).
- Shared timetables move to /edt/[code]; sheets become bottom sheet
  modals so they cover the tab bar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QQsVjKSGCw76DY2MsDTKAJ
- The in-app browser passed decelerationRate="normal" on every platform.
  Only the iOS WebView wrapper turns it into a number; on Android the
  string reached the Fabric view manager delegate, which casts it to
  Double and crashed (ClassCastException in RNCWebViewManagerDelegate).
  The prop is now only set on iOS.
- Quick access now starts with PronoteCampus, SoWeSign and Outlook.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QQsVjKSGCw76DY2MsDTKAJ
- Settings become the fifth tab (gear icon, "Paramètres"), so they are
  always one tap away. The screen moves to components/settings and is
  shared by the tab and by /oobe/settings, opened from the first-launch
  setup before the tabs exist (pushing the tab route there would show the
  whole tab bar mid-setup).
- The home header gear and the timetable menu item are gone, the tab
  replaces them.
- Signing out of the ENT services now confirms with a snackbar: the tab
  stays mounted, a "signed out" state would have stuck for the session.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QQsVjKSGCw76DY2MsDTKAJ
- Tab screens could end behind the tab bar and the bar never minimized
  on scroll: UIKit only looks for the content scroll view in the screen's
  root view and its first child, and react-native-screens only finds it
  in limited cases, so the Screen ScrollView (inside native wrappers) was
  never picked up (react-native-screens issues 3954 and 4145).
  - Screen now asks iOS for automatic content insets itself on tabs.
  - New local module modules/content-scroll: an invisible marker inside
    the ScrollView registers it with setContentScrollView(_:for: .bottom)
    on the tab's view controller, so minimizeBehavior="onScrollDown"
    works. Without a rebuilt app, the marker renders nothing.
- Remove the next class bottom accessory (mini player).
- Bring back the settings gear on the home header; it opens the tab.
- Rename the cookie action to "Vider les cookies du navigateur intégré".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QQsVjKSGCw76DY2MsDTKAJ
@hugofnm hugofnm self-assigned this Oct 4, 2026
Copilot AI balanced review requested due to automatic review settings October 4, 2026 13:51
@hugofnm hugofnm added the important Extra attention is needed label Oct 4, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Comment thread .github/workflows/ci.yml
Comment on lines +10 to +20
name: Lint & typecheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci --ignore-scripts
- run: npm run lint
- run: npm run typecheck
import { Watermark } from '@/src/components/ui/Watermark';
import { APP_VERSION, BUILD_COMMIT, IS_BETA, LINKS } from '@/src/constants/config';
import { useSettings } from '@/src/context/SettingsContext';
import { clearWebSession } from '@/src/services/webSession';
@hugofnm
hugofnm merged commit 618f392 into main Oct 4, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

important Extra attention is needed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants