L'objectif
Les étudiants gardent leur semaine à quatre endroits : le système d'apprentissage de l'école, un calendrier, un tableur de notes et leur tête. Schoolify réunit tout ça dans une seule application ouverte sur chaque appareil qu'ils utilisent, et elle doit être quelque chose à qui un étudiant peut confier ses données scolaires.
La structure
C'est un seul monorepo Turborepo. Les applications sont minces, et la vraie logique vit dans des paquets partagés, si bien qu'une correction arrive sur toutes les plateformes en même temps.
- core contient les règles, comme le calcul des notes et la gestion du temps, sans aucun code de plateforme dedans.
- sync contient un adaptateur pour chaque école et système d'apprentissage, si bien qu'ajouter une école ne touche pas les applications.
- tokens est le système de design, partagé par le web et l'application mobile pour qu'ils ressemblent à un seul produit.
- La base de données est au Canada, et la sécurité au niveau des lignes est active depuis la première migration. Chaque requête est limitée à l'étudiant qui l'a faite.
Se connecter à l'école, en toute sécurité
La façon facile de lire les cours d'un étudiant est de demander son mot de passe scolaire ou un jeton d'accès. Schoolify ne fait ni l'un ni l'autre. Elle lit le flux calendrier que l'école publie déjà pour chaque étudiant, et ajoute une vraie connexion avec chaque école une fois que celle-ci accorde l'accès. Demander un identifiant scolaire dans l'application n'est jamais expédié dans les versions de la boutique.
Le bug de fuseau horaire qui n'était pas le nôtre
La Colombie-Britannique est passée à l'heure d'été permanente le 8 mars 2026. Une application étudiante vit sur des horaires, alors j'ai vérifié ce que chaque partie de la stack croyait. Sur les 9 environnements d'exécution mesurés, 8 expédiaient des données de fuseau horaire trop anciennes pour connaître ce changement. La base de données était la pire, encore sur les règles de 2025.
La correction est de ne jamais faire confiance à la plateforme là-dessus. L'application expédie sa propre règle pour Vancouver et la vérifie au démarrage, et la base de données n'est jamais chargée de convertir une heure locale de Vancouver. Un cours à 10h30 reste à 10h30.
La vie privée comme fonctionnalité
- La date de naissance est gardée dans un schéma privé, à l'écart du reste du profil.
- L'inscription passe par une seule fonction serveur, et aucune autre écriture n'est autorisée tant qu'elle n'a pas tourné. S'inscrire avec Google ou Apple ne peut pas contourner la vérification d'âge.
- Les étudiants peuvent supprimer leur compte eux-mêmes, avec une période de grâce de 7 jours qu'une reconnexion annule, et exporter leurs données via un lien qui expire après 7 jours.
- Les données des utilisateurs ne sont jamais vendues.
Concevoir Wayfinder
Le style s'inspire des panneaux de campus. Des gris calmes et un marine encré portent la mise en page, et le jaune signal est réservé à la seule chose qui a besoin de vous maintenant. Les codes de salle sont composés comme les plaques devant un amphithéâtre, en Atkinson Hyperlegible, une police faite pour être lue d'un coup d'œil entre deux cours.
Ce que j'en ai retenu
- Vérifiez les hypothèses que personne ne vérifie. Les données de fuseau horaire semblaient être un problème résolu jusqu'à ce que je les mesure.
- Décider ce que l'application ne fera jamais, comme demander un mot de passe scolaire, a rendu le reste de la conception plus facile.
- Les paquets partagés d'abord, les applications ensuite. Les trois applications ne sont pour l'essentiel que du câblage.