EMPhance: The Architecture of the Two-Sided Workplace

How a foundational Flutter prototype decoupled the Employee experience from the Employer's gaze.

• View on GitHub • More from hgayan7

A line drawing of a single building with two distinct entrances: one sleek glass door and one heavy wooden door, illustrating two different user experiences in the same application.
A single foundation, two distinct views of the workplace.

Key Takeaways

The Binary Onboarding

Most human resources tools treat employees and managers as different permission levels viewing the same database. EMPhance takes a more radical architectural approach. By analyzing this 2019-era Flutter project, we see the raw origins of Role-Based UI (RBUI) before modern frameworks made it invisible.

The codebase forces a hard branch at the sign-up screen. Instead of a single dynamic form that toggles fields based on a dropdown, the developer split the logic into entirely separate files: signUpEmployee.dart and signUpEmployer.dart. This ensures the two user journeys never accidentally leak context to one another.

How signUpPage.dart acts as a strict traffic controller, splitting the app's architecture.

Gamifying the Cubicle

Administrative tools focus on compliance. Engagement tools focus on retention. EMPhance leans heavily into the latter through its Timeline and Rewards modules. The application attempts to turn standard corporate updates into a social feed.

The inclusion of the timeline_list dependency points to a vertical, chronological feed of achievements and events. It is a deliberate move to make workplace visibility peer-to-peer rather than strictly top-down.

A close-up drawing of a mechanical gear being polished by a small hand holding a trophy, representing the gamification of daily work tasks.
Transforming administrative tracking into active engagement.

The Stubbed Future: Settings and Scalability

Examining settingsEmployee.dart reveals an empty container. This is a classic 'stubbing' pattern in Flutter. It allows a developer to wire up complex navigation routines without needing to build out every final screen.

By explicitly naming the file for the employee role rather than creating a generic settings page, the architecture respects the Single Responsibility Principle. The routing infrastructure remains decoupled from the specific implementation of user preferences.

Traditional HRMSEMPhance Style
Focus on compliance and payrollFocus on engagement and visibility
Top-down data entryPeer-to-peer timelines
Unified UI with permission togglesHard-forked role-based UI

2019 vs. Today: A Flutter Retrospective

EMPhance serves as a time capsule for pre-Null Safety Dart. State management relies heavily on manual setState calls and local text controllers. While verbose by modern standards, it offers an undeniable clarity of execution.

emailController.text.isEmpty ? validateEmail = true : validateEmail = false;
setState(() {});

Today, this logic would likely be handled by a Form widget with built-in validators or a reactive state management solution like Riverpod. Yet, the raw manual validation of 2019 demonstrates exactly how the underlying framework processes user input.

The static widget tree of EMPhance's employee dashboard.