Project Overview
OverviewTheWorks is a mobile application designed to modernize the internship search experience. Built with Flutter for seamless cross-platform performance on iOS and Android, the app acts as a bridge between ambitious tech students and pioneering companies.
The system relies on a real-time database architecture powered by Google Firebase to deliver instant project matching, dynamic search filtering, and live profile updates.
Skills Learned
ExpertiseDuring the engineering of TheWorks, I significantly expanded my mobile development expertise. I mastered the Dart programming language and Flutter state management techniques.
Additionally, I designed scalable data schemas in Google Firestore and crafted an intuitive User Experience (UX) tailored specifically to the needs of both job-seeking students and corporate recruiters.
Tag-Based Matching Algorithm
AlgorithmA cornerstone of the application is the custom matching algorithm that ranks available projects based on candidate skill tags. It expands user tags hierarchically (e.g., 'Front-end' implies 'HTML/CSS') and calculates a relevance score for optimal pairing.
List<(Project, int)> sortProjectsByTags(List projects, List userTags) {
if (userTags.isEmpty) {
return projects.map((p) => (p, 0)).toList();
}
final expandedUserTags = expandTags(userTags);
final List<(Project, int)> matches = [];
final List others = [];
for (final project in projects) {
int score = 0;
for (final projectTag in project.tags) {
if (expandedUserTags.contains(projectTag.toLowerCase())) {
score++;
}
}
if (score > 0) {
matches.add((project, score));
} else {
others.add(project);
}
}
matches.sort((a, b) => b.$2.compareTo(a.$2));
return [...matches, ...others.map((p) => (p, 0))];
}
Secure Authentication
SecurityUser credentials and access controls are secured using Firebase Authentication, providing encrypted sign-in, user registration, and automated password recovery flows.
class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
Future signIn({required String email, required String password}) async {
return await _auth.signInWithEmailAndPassword(
email: email, password: password);
}
Future createAccount({required String email, required String password, required String displayName}) async {
var user = await _auth.createUserWithEmailAndPassword(
email: email, password: password);
user.user!.updateDisplayName(displayName);
return user;
}
}
Data Architecture
Data ModelsThe app employs strongly typed Dart data models to ensure full type safety and seamless serialization between Cloud Firestore JSON documents and the Flutter UI layer.
class Project {
final String? id;
final String name;
final String description;
final List tags;
final String companyName;
final String locationType;
Project({
this.id,
required this.name,
required this.description,
required this.tags,
required this.companyName,
required this.locationType,
});
Map toMap() {
return {
'name': name,
'description': description,
'tags': tags,
'companyName': companyName,
'locationType': locationType,
'searchTags': tags.map((t) => t.toLowerCase()).toList(),
};
}
}