diff --git a/lib/l10n/arb/app_localizations.dart b/lib/l10n/arb/app_localizations.dart
new file mode 100644
index 0000000..7e6c71d
--- /dev/null
+++ b/lib/l10n/arb/app_localizations.dart
@@ -0,0 +1,307 @@
+import 'dart:async';
+
+import 'package:flutter/foundation.dart';
+import 'package:flutter/widgets.dart';
+import 'package:flutter_localizations/flutter_localizations.dart';
+import 'package:intl/intl.dart' as intl;
+
+import 'app_localizations_en.dart';
+
+// ignore_for_file: type=lint
+
+/// Callers can lookup localized strings with an instance of AppLocalizations
+/// returned by `AppLocalizations.of(context)`.
+///
+/// Applications need to include `AppLocalizations.delegate()` in their app's
+/// `localizationDelegates` list, and the locales they support in the app's
+/// `supportedLocales` list. For example:
+///
+/// ```dart
+/// import 'arb/app_localizations.dart';
+///
+/// return MaterialApp(
+///   localizationsDelegates: AppLocalizations.localizationsDelegates,
+///   supportedLocales: AppLocalizations.supportedLocales,
+///   home: MyApplicationHome(),
+/// );
+/// ```
+///
+/// ## Update pubspec.yaml
+///
+/// Please make sure to update your pubspec.yaml to include the following
+/// packages:
+///
+/// ```yaml
+/// dependencies:
+///   # Internationalization support.
+///   flutter_localizations:
+///     sdk: flutter
+///   intl: any # Use the pinned version from flutter_localizations
+///
+///   # Rest of dependencies
+/// ```
+///
+/// ## iOS Applications
+///
+/// iOS applications define key application metadata, including supported
+/// locales, in an Info.plist file that is built into the application bundle.
+/// To configure the locales supported by your app, you’ll need to edit this
+/// file.
+///
+/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file.
+/// Then, in the Project Navigator, open the Info.plist file under the Runner
+/// project’s Runner folder.
+///
+/// Next, select the Information Property List item, select Add Item from the
+/// Editor menu, then select Localizations from the pop-up menu.
+///
+/// Select and expand the newly-created Localizations item then, for each
+/// locale your application supports, add a new item and select the locale
+/// you wish to add from the pop-up menu in the Value field. This list should
+/// be consistent with the languages listed in the AppLocalizations.supportedLocales
+/// property.
+abstract class AppLocalizations {
+  AppLocalizations(String locale)
+      : localeName = intl.Intl.canonicalizedLocale(locale.toString());
+
+  final String localeName;
+
+  static AppLocalizations? of(BuildContext context) {
+    return Localizations.of<AppLocalizations>(context, AppLocalizations);
+  }
+
+  static const LocalizationsDelegate<AppLocalizations> delegate =
+      _AppLocalizationsDelegate();
+
+  /// A list of this localizations delegate along with the default localizations
+  /// delegates.
+  ///
+  /// Returns a list of localizations delegates containing this delegate along with
+  /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
+  /// and GlobalWidgetsLocalizations.delegate.
+  ///
+  /// Additional delegates can be added by appending to this list in
+  /// MaterialApp. This list does not have to be used at all if a custom list
+  /// of delegates is preferred or required.
+  static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
+      <LocalizationsDelegate<dynamic>>[
+    delegate,
+    GlobalMaterialLocalizations.delegate,
+    GlobalCupertinoLocalizations.delegate,
+    GlobalWidgetsLocalizations.delegate,
+  ];
+
+  /// A list of this localizations delegate's supported locales.
+  static const List<Locale> supportedLocales = <Locale>[Locale('en')];
+
+  /// App title
+  ///
+  /// In en, this message translates to:
+  /// **'QuizApp'**
+  String get appTitle;
+
+  /// `AuthFailure` message
+  ///
+  /// In en, this message translates to:
+  /// **'There\'s been an error, please log back in!'**
+  String get authFailureMessage;
+
+  /// `LogOutFailure` message
+  ///
+  /// In en, this message translates to:
+  /// **'There\'s been an error while logging out, please try again!'**
+  String get signOutFailureMessage;
+
+  /// `AnonymousSignInFailure` message
+  ///
+  /// In en, this message translates to:
+  /// **'You can\'t sign in as a guest at the moment, please try again later!'**
+  String get anonymousSignInFailureMessage;
+
+  /// `GoogleSignInFailure` message
+  ///
+  /// In en, this message translates to:
+  /// **'There\'s been an error while signing in with google, please try again!'**
+  String get googleSignInFailureMessage;
+
+  /// `AppleSignInFailure` message
+  ///
+  /// In en, this message translates to:
+  /// **'There\'s been an error while signing in with apple, please try again!'**
+  String get appleSignInFailureMessage;
+
+  /// `AppleSignInNotSupportedFailure` message
+  ///
+  /// In en, this message translates to:
+  /// **'Apple sign in is not supported on your device!'**
+  String get appleSignInNotSupportedFailureMessage;
+
+  /// Unknown failure message
+  ///
+  /// In en, this message translates to:
+  /// **'There\'s been an error, please try again!'**
+  String get unknownFailureMessage;
+
+  /// Sign in with google button label
+  ///
+  /// In en, this message translates to:
+  /// **'Login to Start'**
+  String get loginPreamble;
+
+  /// `LoginPage` tagline
+  ///
+  /// In en, this message translates to:
+  /// **'Test your app development knowledge with quick bite-sized quizzes from fireship.io'**
+  String get loginTagline;
+
+  /// No description provided for @loginWithGoogleButtonLabel.
+  ///
+  /// In en, this message translates to:
+  /// **'Login with Google'**
+  String get loginWithGoogleButtonLabel;
+
+  /// Sign in with apple button label
+  ///
+  /// In en, this message translates to:
+  /// **'Login with Apple'**
+  String get loginWithAppleButtonLabel;
+
+  /// Sign in as guest button label
+  ///
+  /// In en, this message translates to:
+  /// **'Continue as Guest'**
+  String get loginAsGuestButtonLabel;
+
+  /// Topics  label
+  ///
+  /// In en, this message translates to:
+  /// **'Topics'**
+  String get topicsLabel;
+
+  /// About  label
+  ///
+  /// In en, this message translates to:
+  /// **'About'**
+  String get aboutLabel;
+
+  /// Profile  label
+  ///
+  /// In en, this message translates to:
+  /// **'Profile'**
+  String get profileLabel;
+
+  /// `GetTopicsFailure` message
+  ///
+  /// In en, this message translates to:
+  /// **'There\'s been an error getting the topics 🙄'**
+  String get getTopicsFailureMessage;
+
+  /// No topics message
+  ///
+  /// In en, this message translates to:
+  /// **'There are no topics 😏'**
+  String get noTopicsMessage;
+
+  /// Congrats message
+  ///
+  /// In en, this message translates to:
+  /// **'Congrats! You completed the {quizTitle} quiz'**
+  String congratsMessage(String quizTitle);
+
+  /// `QuizStartButton` label
+  ///
+  /// In en, this message translates to:
+  /// **'Start Quiz!'**
+  String get quizStartButtonLabel;
+
+  /// `CompleteQuizButton` label
+  ///
+  /// In en, this message translates to:
+  /// **'Mark Complete!'**
+  String get markQuizCompletedButtonLabel;
+
+  /// Message shown when correctly answering a quiz question
+  ///
+  /// In en, this message translates to:
+  /// **'Good Job!'**
+  String get correctAnswerMessage;
+
+  /// Message shown when incorrectly answering a quiz question
+  ///
+  /// In en, this message translates to:
+  /// **'Wrong'**
+  String get wrongAnswerMessage;
+
+  /// `QuizButton`'s label on a correct answer
+  ///
+  /// In en, this message translates to:
+  /// **'Onward!'**
+  String get correctQuizButtonLabel;
+
+  /// `QuizButton`'s label on an incorrect answer
+  ///
+  /// In en, this message translates to:
+  /// **'Try Again'**
+  String get wrongQuizButtonLabel;
+
+  /// `QuizButton`'s label on an incorrect answer
+  ///
+  /// In en, this message translates to:
+  /// **'There\'s no quiz data 😏'**
+  String get noQuizDataMessage;
+
+  /// `GetQuizFailure` message
+  ///
+  /// In en, this message translates to:
+  /// **'There\'s been an error getting quiz data 🙄'**
+  String get getQuizFailureMessage;
+
+  /// Display name on guest profiles
+  ///
+  /// In en, this message translates to:
+  /// **'Guest'**
+  String get guestProfileDisplayName;
+
+  /// Total completed quizzes label
+  ///
+  /// In en, this message translates to:
+  /// **'Quizzes Completed'**
+  String get totalCompletedQuizzesLabel;
+
+  /// `LogOutButton`'s label on profile view
+  ///
+  /// In en, this message translates to:
+  /// **'Logout'**
+  String get logOutButtonLabel;
+}
+
+class _AppLocalizationsDelegate
+    extends LocalizationsDelegate<AppLocalizations> {
+  const _AppLocalizationsDelegate();
+
+  @override
+  Future<AppLocalizations> load(Locale locale) {
+    return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
+  }
+
+  @override
+  bool isSupported(Locale locale) =>
+      <String>['en'].contains(locale.languageCode);
+
+  @override
+  bool shouldReload(_AppLocalizationsDelegate old) => false;
+}
+
+AppLocalizations lookupAppLocalizations(Locale locale) {
+  // Lookup logic when only language code is specified.
+  switch (locale.languageCode) {
+    case 'en':
+      return AppLocalizationsEn();
+  }
+
+  throw FlutterError(
+      'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
+      'an issue with the localizations generation tool. Please file an issue '
+      'on GitHub with a reproducible sample app and the gen-l10n configuration '
+      'that was used.');
+}
diff --git a/lib/l10n/arb/app_localizations_en.dart b/lib/l10n/arb/app_localizations_en.dart
new file mode 100644
index 0000000..46526a8
--- /dev/null
+++ b/lib/l10n/arb/app_localizations_en.dart
@@ -0,0 +1,112 @@
+// ignore: unused_import
+import 'package:intl/intl.dart' as intl;
+import 'app_localizations.dart';
+
+// ignore_for_file: type=lint
+
+/// The translations for English (`en`).
+class AppLocalizationsEn extends AppLocalizations {
+  AppLocalizationsEn([String locale = 'en']) : super(locale);
+
+  @override
+  String get appTitle => 'QuizApp';
+
+  @override
+  String get authFailureMessage =>
+      'There\'s been an error, please log back in!';
+
+  @override
+  String get signOutFailureMessage =>
+      'There\'s been an error while logging out, please try again!';
+
+  @override
+  String get anonymousSignInFailureMessage =>
+      'You can\'t sign in as a guest at the moment, please try again later!';
+
+  @override
+  String get googleSignInFailureMessage =>
+      'There\'s been an error while signing in with google, please try again!';
+
+  @override
+  String get appleSignInFailureMessage =>
+      'There\'s been an error while signing in with apple, please try again!';
+
+  @override
+  String get appleSignInNotSupportedFailureMessage =>
+      'Apple sign in is not supported on your device!';
+
+  @override
+  String get unknownFailureMessage =>
+      'There\'s been an error, please try again!';
+
+  @override
+  String get loginPreamble => 'Login to Start';
+
+  @override
+  String get loginTagline =>
+      'Test your app development knowledge with quick bite-sized quizzes from fireship.io';
+
+  @override
+  String get loginWithGoogleButtonLabel => 'Login with Google';
+
+  @override
+  String get loginWithAppleButtonLabel => 'Login with Apple';
+
+  @override
+  String get loginAsGuestButtonLabel => 'Continue as Guest';
+
+  @override
+  String get topicsLabel => 'Topics';
+
+  @override
+  String get aboutLabel => 'About';
+
+  @override
+  String get profileLabel => 'Profile';
+
+  @override
+  String get getTopicsFailureMessage =>
+      'There\'s been an error getting the topics 🙄';
+
+  @override
+  String get noTopicsMessage => 'There are no topics 😏';
+
+  @override
+  String congratsMessage(String quizTitle) {
+    return 'Congrats! You completed the $quizTitle quiz';
+  }
+
+  @override
+  String get quizStartButtonLabel => 'Start Quiz!';
+
+  @override
+  String get markQuizCompletedButtonLabel => 'Mark Complete!';
+
+  @override
+  String get correctAnswerMessage => 'Good Job!';
+
+  @override
+  String get wrongAnswerMessage => 'Wrong';
+
+  @override
+  String get correctQuizButtonLabel => 'Onward!';
+
+  @override
+  String get wrongQuizButtonLabel => 'Try Again';
+
+  @override
+  String get noQuizDataMessage => 'There\'s no quiz data 😏';
+
+  @override
+  String get getQuizFailureMessage =>
+      'There\'s been an error getting quiz data 🙄';
+
+  @override
+  String get guestProfileDisplayName => 'Guest';
+
+  @override
+  String get totalCompletedQuizzesLabel => 'Quizzes Completed';
+
+  @override
+  String get logOutButtonLabel => 'Logout';
+}