feat: revamp all UI - #60
Merged
Merged
Conversation
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
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'; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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é !