Finoo
Software Engineer (Frontend - Vue)
Oct 2024 → Feb 2025
Finoo Partner - Dashboard and Student Management in Vue 3
Owned the evolution of a Vue 3 SPA Partner, improving the KPI Dashboard and the student management flow (invites, tables, and details) while strengthening API composables and UI consistency.
Tech Stack
Vue 3 (Composition API)
TypeScript
Vite
Tailwind CSS
@tanstack/vue-query
Axios
Radix Vue
Unovis
Key Metrics
42 commits (~57% of the repo)
4+ areas touched (Auth, Dashboard, Students, Settings)
Continuous delivery through Feb/2025 (merges/PRs)
Summary
- Delivery: improved the Dashboard (KPIs/charts/shortcuts) and the Student Management module (lists, invites, and details).
- How I unlocked scale: consolidated API composables (e.g., partner + invites) and reinforced shared UI patterns to keep screens predictable.
- Practical effect: more consistent screens, more complete invite workflows (including CSV), and UX refinements in auth/settings.
Over ~5 months, I owned a slice of the Partner focused on UX/DX and predictability, under constraints of low automated test coverage and the need to ship safely with frequent iterative changes.
Context
- Product and users: a partner/admin SPA used to monitor KPIs and perform student operations (invites, listings, and details).
- Why it was critical: dashboard visibility + daily operations (invites/management) are high-frequency workflows-regressions directly create operational friction.
- Real constraints: limited test automation meant risk had to be reduced via patterns, typing, and incremental changes.
Key Challenges
- Keeping visual consistency and predictable UX across different areas (KPIs, tables, forms).
- Evolving API integrations without scattering business rules across UI components (avoiding coupling and rework).
- Improving sensitive UX flows (auth/settings) through small but frequent iterations without breaking core paths.
What I did
- Dashboard (Home): improved KPI cards, charts, and layout details to make key data easier to read and act on.
- Student Management: enhanced UI and functionality for invites and student lists, including CSV upload for bulk operations and table refinements.
- Foundation to scale (data layer): introduced/structured API composables (partner + invites) to reduce duplication and keep integrations maintainable.
- Operational UX polish: improved feedback and usability (success toasts, form UX, password toggles/autocomplete) and adjusted the header to surface partner context.
Decisions & Trade-offs
- API composables > logic spread across components: centralizing calls and types reduced regressions and sped up new screens.
Trade-off: adds an abstraction layer that requires conventions and onboarding. - Incremental evolution > “big bang” refactor: smaller, reviewable commits helped manage production risk.
Trade-off: some legacy debt persists until there’s a stabilization window. - Specific example: shipped CSV upload in the invite flow to unlock bulk operations.
Trade-off: requires careful validation/error handling and clear user feedback in the UI.
Results
- Measured (engineering): 42 commits (~57% of the repository activity in the analyzed slice).
- Concrete technical proxies:
- Dashboard iteration (KPIs/cards/charts) and Student Management improvements (lists/invites/details).
- Bulk invite workflow delivered via CSV upload, plus relevant refactors around tables and invite handling.
- UX improvements in auth/settings (autocomplete, password toggle, toasts) and partner-context header updates.
- Operational impact: increased predictability for ongoing development by relying on composables + shared UI patterns, reducing rework and making changes safer.
Note: sensitive product metrics may live in internal dashboards; redacted evidence can be organized upon request.
What I’d do differently
- Add a minimal baseline of automated tests (critical components + smoke flows) to reduce regression risk.
- Establish a lightweight Definition of Done checklist (lint/build + key UX checks) to stabilize delivery quality.
- Formalize a single standard for forms/tables (validation, loading/error states, empty states) to reduce variation across screens.