{"id":10695,"date":"2025-08-21T07:34:06","date_gmt":"2025-08-21T07:34:06","guid":{"rendered":"https:\/\/ciit-training.com\/?p=10695"},"modified":"2025-11-11T09:50:24","modified_gmt":"2025-11-11T09:50:24","slug":"how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend","status":"publish","type":"post","link":"https:\/\/ciit-training.com\/en\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/","title":{"rendered":"How Firebase Enabled Us to Build a Quiz App in Hours Without a Backend"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"10695\" class=\"elementor elementor-10695\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e8a8803 e-con-full e-flex e-con e-parent\" data-id=\"e8a8803\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2636586 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"2636586\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">The Idea Behind This Blog Entry<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c8af678 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"c8af678\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>For one of our recent side projects at <a href=\"https:\/\/ciit-software.com\/\" target=\"_blank\" rel=\"noopener\">CIIT Software<\/a>, we wanted to build a simple quiz app, but without spending days setting up a backend, database, and authentication. Normally, this would mean spinning up a Java\/Spring server, writing a REST API, configuring a database, and managing sessions. Instead, we decided to give <a href=\"https:\/\/firebase.google.com\/\" target=\"_blank\" rel=\"noopener\">Firebase<\/a> a try. Firestore took care of storage and scaling, Firebase Auth gave us user authentication without the hassle of managing sessions, and with Firebase Hosting our app was online in no time, complete with HTTPS out of the box. What usually feels like a long setup phase turned into a matter of hours, leaving us more time to focus on the actual quiz logic.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-64c7b35 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"64c7b35\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">The Story<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-772cf4e elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"772cf4e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Hours before an event, a sponsor decided to provide a prize for one attendee. To be eligible, attendees had to agree to the terms and conditions, submit their name, and answer a question related to the event goal. Each user could only submit an answer once, and we needed to keep all the answers for analysis. Rather than setting up servers, databases and a backend, we developed a basic Angular frontend and used Firebase for everything else.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3afcc8b elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"3afcc8b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Why Firebase?<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-649fd3b elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"649fd3b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In fast-paced projects, we sometimes need a reliable solution that doesn&#8217;t require the overhead of building a full backend. Recently, our team was faced with such a situation: just hours before an event, a sponsor decided to award a prize to one of the attendees. We needed a way for attendees to submit their name, accept the terms and conditions, and answer a question, each only once. Usually, this would require setting up a server, database, authentication and hosting, but with Firebase, we had a complete solution within hours. It saved us significant time and effort by handling:<\/p><ul><li>Authentication: Anonymous sign-in out of the box.<\/li><li>Database: All storage, scaling, and retrieval.<\/li><li>Hosting: HTTPS-enabled Firebase Hosting meant no server setup.<\/li><li>Backend Setup: We completely skipped creating a backend, REST APIs, and session management.<\/li><\/ul><p><br \/>This allowed us to focus entirely on the frontend logic and user experience.<br \/>This tutorial will guide you through the process of building a simple Angular app, powered by Firebase, step by step.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9af1851 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"9af1851\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Step 1: Creating a Firebase Project<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-453c313 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"453c313\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ol><li>Go to the <a href=\"https:\/\/console.firebase.google.com\/\" target=\"_blank\" rel=\"noopener\">Firebase Console<\/a>.<\/li><li>Click &#8222;Add project&#8220;, enter a project name (e.g. <span style=\"color: #008000;\">firebase-quiz<\/span>), and follow the prompts.<\/li><li>Enable or skip Google Analytics depending on your needs.<\/li><li>Click &#8222;Create project&#8220;.<\/li><\/ol><p><br \/>Once your project is ready, you&#8217;ll be able to configure web apps and services.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f1013d2 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"f1013d2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Step 2: Registering Your Web App<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a0fed40 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"a0fed40\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ol><li>Open your project in Firebase Console.<\/li><li>Click the web icon (&lt;\/&gt;) to add a new web app.<span style=\"font-weight: 400;\"><br \/><\/span><\/li><li>Give it a nickname (e.g. <span style=\"color: #008000;\">firebase-quiz-web<\/span>) and click &#8222;register app&#8220;.<\/li><li>Copy the Firebase configuration object. You&#8217;ll need it for your Angular environment files.<\/li><\/ol><p><br \/>Example configuration:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-413d2b6 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-code-highlight\" data-id=\"413d2b6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>export const environment = {\n  production: false,\n  firebase: {\n    apiKey: \"YOUR_API_KEY\",\n    authDomain: \"YOUR_PROJECT_ID.firebaseapp.com\",\n    projectId: \"YOUR_PROJECT_ID\",\n    storageBucket: \"YOUR_PROJECT_ID.appspot.com\",\n    messagingSenderId: \"YOUR_MESSAGING_SENDER_ID\",\n    appId: \"YOUR_APP_ID\"\n  }\n};<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a804946 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-spacer\" data-id=\"a804946\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d2bca14 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"d2bca14\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Step 3: Installing Firebase Libraries<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e62a991 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"e62a991\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In your Angular project, install Firebase and AngularFire:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-07501c4 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-code-highlight\" data-id=\"07501c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>npm install firebase @angular\/fire\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2306410 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-spacer\" data-id=\"2306410\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7ba317c elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"7ba317c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Step 4: Setting Up Authentication<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bdb243e elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"bdb243e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ol><li>In Firebase Console, go to &#8222;Autentication -&gt; Get Started&#8220;.<\/li><li>Enable &#8222;Anonymous sign-in&#8220;.<\/li><li>Save changes.<\/li><\/ol><p><br \/>This allowed us to track users without requiring accounts. Each user automatically receives a unique UID.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b4b4133 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"b4b4133\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Step 5: Creating the Firestore Database<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e4d7b7 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"5e4d7b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ol><li>Got to &#8222;Firestore Database -&gt; Create database&#8220;.<\/li><li>Choose &#8222;Production&#8220; or &#8222;Test mode&#8220; depending on your project.<\/li><li>Select a region close to your users and click &#8222;Enable&#8220;.<\/li><\/ol><p><br \/>We used a single collection called <span style=\"color: #008000;\">quizSubmissions<\/span>, where each document is keyed by <span style=\"color: #008000;\">user .uid<\/span>. Each submission stores:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40b2db6 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-code-highlight\" data-id=\"40b2db6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>{\n  \"fullName\": \"string\",\n  \"answer\": \"string\",\n  \"timestamp\": \"Date\"\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6f0b901 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-spacer\" data-id=\"6f0b901\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0967d2a elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"0967d2a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Step 6: Angular Integration<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cb97296 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"cb97296\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>We created a standalone component (QuizComponent) and a service (AuthService) to manage authentication and submissions.<\/p><p><strong>Firebase App Configuration (app.config.ts):<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-95946ae exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-code-highlight\" data-id=\"95946ae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>export const appConfig: ApplicationConfig = {\n  providers: [\n    provideRouter(routes),\n    provideFirebaseApp(() => initializeApp(environment.firebase)),\n    provideFirestore(() => getFirestore()),\n    provideAuth(() => getAuth()),\n  ]\n};<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-19c2be3 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"19c2be3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>AuthService (Anonymous Authentication):<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3e39e13 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-code-highlight\" data-id=\"3e39e13\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp> async getOrCreateUser(): Promise<User> {\n    if (this.auth.currentUser) return this.auth.currentUser;\n    const result = await signInAnonymously(this.auth);\n    return result.user;\n  }<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8f6d183 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"8f6d183\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>QuizComponent (Submission Logic):<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8a64011 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-code-highlight\" data-id=\"8a64011\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>async submit() {\n  this.loading = true;\n  try {\n    const user = await this.authService.getOrCreateUser();\n    await setDoc(doc(this.firestore, 'quizSubmissions', user.uid), {\n      answer: this.selectedAnswer,\n      fullName: this.fullName,\n      timestamp: new Date()\n    });\n    this.showSuccessModal = true;\n  } catch (error) {\n    this.showErrorModal = true;\n  } finally {\n    this.loading = false;\n  }\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8be33de elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"8be33de\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Key points:<\/p><ul><li>Each user can submit only once.<\/li><li>Submissions are automatically saved in Firestore.<\/li><li>The component shows success or error feedback.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f1c560b exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-spacer\" data-id=\"f1c560b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40e75bb elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"40e75bb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Step 7: Deploying to Firebase Hosting<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c81ed98 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"c81ed98\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Install Firebase CLI:<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3ea6885 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-code-highlight\" data-id=\"3ea6885\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>npm install -g firebase-tools\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-285b25f elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"285b25f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Login to Firebase:<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ea23613 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-code-highlight\" data-id=\"ea23613\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>firebase login\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b22a8e elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"4b22a8e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Initialize your project for hosting:<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6e82e74 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-code-highlight\" data-id=\"6e82e74\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>firebase init\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-065b358 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"065b358\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li>Select &#8222;Hosting&#8220;.<\/li><li>Choose your Firebase project.<\/li><li>Set dist\/fe\/browser as your public directory.<\/li><li>Configure as a single-page app: Yes.<\/li><li>Deploy the project<\/li><\/ul><p><strong><br \/>Deploy the project:<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5378d13 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-code-highlight\" data-id=\"5378d13\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>firebase deploy\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-16cf9ee exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-spacer\" data-id=\"16cf9ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-46f78d8 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"46f78d8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Results &amp; Time Saved<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c151fc5 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"c151fc5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>By using Firebase, we were able to skip the usual backend development, REST API creation, and session management entirely. Firestone seamlessly took care of scaling and data storage without any setup on our side. With anonymous authentication, we could still track users without forcing them through login forms. And thanks to Firebase Hosting, the app was deployed within minutes, complete with HTTPS right out of the box. This saved several hours of development, letting us focus on the event itself rather than infrastructure.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-af828ac elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"af828ac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Full Project<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1227030 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"1227030\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The complete Angular + Firebase project is available on GitHub:<\/p><ul><li>Git repository: <a href=\"https:\/\/gitlab.ciit-training.com\/amjad\/firebase-quiz\">https:\/\/gitlab.ciit-training.com\/amjad\/firebase-quiz<\/a><\/li><li>Deployed app: <a href=\"https:\/\/ciit-firebase-quiz.web.app\">https:\/\/ciit-firebase-quiz.web.app<\/a><\/li><\/ul><p><br \/>Includes:<\/p><ul><li>Complete QuizComponent and AuthService.<\/li><li>Angular environment setup for Firebase.<\/li><li>Hosting configuration.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ed7caa6 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-spacer\" data-id=\"ed7caa6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-230a8e6 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"230a8e6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Conclusion<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b88e25 elementor-widget__width-inherit exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"4b88e25\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Firebase enabled us to build a fully functional, secure, and scalable quiz application in record time. By skipping backend development, database configuration, and hosting setup, we delivered a working solution within hours instead of days. For small, event-based projects like this, Firebase proves to be an extremely efficient choice.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-407c5a5 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-spacer\" data-id=\"407c5a5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8192ab1 e-flex e-con-boxed e-con e-parent\" data-id=\"8192ab1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ce1ebfc exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"ce1ebfc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"479\" src=\"https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2025\/08\/Amjad-1024x613.jpg\" class=\"attachment-large size-large wp-image-10706\" alt=\"Firebase Mockup\" srcset=\"https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2025\/08\/Amjad-1024x613.jpg 1024w, https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2025\/08\/Amjad-300x180.jpg 300w, https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2025\/08\/Amjad-768x460.jpg 768w, https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2025\/08\/Amjad-1536x920.jpg 1536w, https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2025\/08\/Amjad-18x12.jpg 18w, https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2025\/08\/Amjad.avif 1803w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>The Idea Behind This Blog Entry For one of our recent side projects at CIIT Software, we wanted to build a simple quiz app, but without spending days setting up a backend, database, and authentication. Normally, this would mean spinning up a Java\/Spring server, writing a REST API, configuring a database, and managing sessions. Instead, [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":10713,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[122,78,129,128,125,130,108,127,131,132,84,109,126],"class_list":["post-10695","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-app","tag-app-development","tag-backend","tag-database","tag-firebase","tag-frontend","tag-it","tag-programming","tag-rest-api","tag-server","tag-software","tag-tech","tag-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How Firebase Enabled Us to Build a Quiz App in Hours Without a Backend - CIIT Training<\/title>\n<meta name=\"description\" content=\"Discover how we built a fully functional quiz app in just hours using Firebase - fast, simple, and without a backend.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ciit-training.com\/en\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How Firebase Enabled Us to Build a Quiz App in Hours Without a Backend - CIIT Training\" \/>\n<meta property=\"og:description\" content=\"Discover how we built a fully functional quiz app in just hours using Firebase - fast, simple, and without a backend.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ciit-training.com\/en\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/\" \/>\n<meta property=\"og:site_name\" content=\"CIIT Training\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javatraining.at\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-21T07:34:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-11T09:50:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2023\/11\/CIIT_Logo_BrightBackground_Blau_ohne_at.png\" \/>\n\t<meta property=\"og:image:width\" content=\"512\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"wiki\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@JavaTrainingAT\" \/>\n<meta name=\"twitter:site\" content=\"@JavaTrainingAT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"wiki\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\\\/\\\/ciit-training.com\\\/2025\\\/08\\\/21\\\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ciit-training.com\\\/2025\\\/08\\\/21\\\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\\\/\"},\"author\":{\"name\":\"wiki\",\"@id\":\"https:\\\/\\\/ciit-training.com\\\/#\\\/schema\\\/person\\\/da3b2b472673dcc7f0933808391c9ccf\"},\"headline\":\"How Firebase Enabled Us to Build a Quiz App in Hours Without a Backend\",\"datePublished\":\"2025-08-21T07:34:06+00:00\",\"dateModified\":\"2025-11-11T09:50:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ciit-training.com\\\/2025\\\/08\\\/21\\\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\\\/\"},\"wordCount\":851,\"publisher\":{\"@id\":\"https:\\\/\\\/ciit-training.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/ciit-training.com\\\/2025\\\/08\\\/21\\\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ciit-training.com\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/08\\\/Thumbnail-_28_.avif\",\"keywords\":[\"app\",\"App Development\",\"backend\",\"database\",\"Firebase\",\"frontend\",\"IT\",\"programming\",\"rest api\",\"server\",\"Software\",\"Tech\",\"tutorial\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ciit-training.com\\\/2025\\\/08\\\/21\\\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\\\/\",\"url\":\"https:\\\/\\\/ciit-training.com\\\/2025\\\/08\\\/21\\\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\\\/\",\"name\":\"How Firebase Enabled Us to Build a Quiz App in Hours Without a Backend - CIIT Training\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ciit-training.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ciit-training.com\\\/2025\\\/08\\\/21\\\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ciit-training.com\\\/2025\\\/08\\\/21\\\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ciit-training.com\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/08\\\/Thumbnail-_28_.avif\",\"datePublished\":\"2025-08-21T07:34:06+00:00\",\"dateModified\":\"2025-11-11T09:50:24+00:00\",\"description\":\"Discover how we built a fully functional quiz app in just hours using Firebase - fast, simple, and without a backend.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ciit-training.com\\\/2025\\\/08\\\/21\\\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ciit-training.com\\\/2025\\\/08\\\/21\\\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ciit-training.com\\\/2025\\\/08\\\/21\\\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ciit-training.com\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/08\\\/Thumbnail-_28_.avif\",\"contentUrl\":\"https:\\\/\\\/ciit-training.com\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/08\\\/Thumbnail-_28_.avif\",\"width\":1280,\"height\":720,\"caption\":\"Firebase Logo\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ciit-training.com\\\/2025\\\/08\\\/21\\\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ciit-training.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How Firebase Enabled Us to Build a Quiz App in Hours Without a Backend\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ciit-training.com\\\/#website\",\"url\":\"https:\\\/\\\/ciit-training.com\\\/\",\"name\":\"CIIT Training\",\"description\":\"Javatraing\",\"publisher\":{\"@id\":\"https:\\\/\\\/ciit-training.com\\\/#organization\"},\"alternateName\":\"Javatraining\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ciit-training.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/ciit-training.com\\\/#organization\",\"name\":\"CIIT GmbH\",\"alternateName\":\"Schaffler & Gl\u00f6\u00dfl GmbH\",\"url\":\"https:\\\/\\\/ciit-training.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ciit-training.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/ciit-training.com\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2023\\\/11\\\/CIIT_Logo_BrightBackground_Blau_ohne_at.png\",\"contentUrl\":\"https:\\\/\\\/ciit-training.com\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2023\\\/11\\\/CIIT_Logo_BrightBackground_Blau_ohne_at.png\",\"width\":512,\"height\":512,\"caption\":\"CIIT GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/ciit-training.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javatraining.at\",\"https:\\\/\\\/x.com\\\/JavaTrainingAT\",\"https:\\\/\\\/www.linkedin.com\\\/showcase\\\/javatraining.at\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ciit-training.com\\\/#\\\/schema\\\/person\\\/da3b2b472673dcc7f0933808391c9ccf\",\"name\":\"wiki\",\"url\":\"https:\\\/\\\/ciit-training.com\\\/en\\\/author\\\/wiki\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How Firebase Enabled Us to Build a Quiz App in Hours Without a Backend - CIIT Training","description":"Discover how we built a fully functional quiz app in just hours using Firebase - fast, simple, and without a backend.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ciit-training.com\/en\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/","og_locale":"en_US","og_type":"article","og_title":"How Firebase Enabled Us to Build a Quiz App in Hours Without a Backend - CIIT Training","og_description":"Discover how we built a fully functional quiz app in just hours using Firebase - fast, simple, and without a backend.","og_url":"https:\/\/ciit-training.com\/en\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/","og_site_name":"CIIT Training","article_publisher":"https:\/\/www.facebook.com\/javatraining.at","article_published_time":"2025-08-21T07:34:06+00:00","article_modified_time":"2025-11-11T09:50:24+00:00","og_image":[{"width":512,"height":512,"url":"https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2023\/11\/CIIT_Logo_BrightBackground_Blau_ohne_at.png","type":"image\/png"}],"author":"wiki","twitter_card":"summary_large_image","twitter_creator":"@JavaTrainingAT","twitter_site":"@JavaTrainingAT","twitter_misc":{"Written by":"wiki","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/ciit-training.com\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/#article","isPartOf":{"@id":"https:\/\/ciit-training.com\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/"},"author":{"name":"wiki","@id":"https:\/\/ciit-training.com\/#\/schema\/person\/da3b2b472673dcc7f0933808391c9ccf"},"headline":"How Firebase Enabled Us to Build a Quiz App in Hours Without a Backend","datePublished":"2025-08-21T07:34:06+00:00","dateModified":"2025-11-11T09:50:24+00:00","mainEntityOfPage":{"@id":"https:\/\/ciit-training.com\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/"},"wordCount":851,"publisher":{"@id":"https:\/\/ciit-training.com\/#organization"},"image":{"@id":"https:\/\/ciit-training.com\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/#primaryimage"},"thumbnailUrl":"https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2025\/08\/Thumbnail-_28_.avif","keywords":["app","App Development","backend","database","Firebase","frontend","IT","programming","rest api","server","Software","Tech","tutorial"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/ciit-training.com\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/","url":"https:\/\/ciit-training.com\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/","name":"How Firebase Enabled Us to Build a Quiz App in Hours Without a Backend - CIIT Training","isPartOf":{"@id":"https:\/\/ciit-training.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ciit-training.com\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/#primaryimage"},"image":{"@id":"https:\/\/ciit-training.com\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/#primaryimage"},"thumbnailUrl":"https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2025\/08\/Thumbnail-_28_.avif","datePublished":"2025-08-21T07:34:06+00:00","dateModified":"2025-11-11T09:50:24+00:00","description":"Discover how we built a fully functional quiz app in just hours using Firebase - fast, simple, and without a backend.","breadcrumb":{"@id":"https:\/\/ciit-training.com\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ciit-training.com\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ciit-training.com\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/#primaryimage","url":"https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2025\/08\/Thumbnail-_28_.avif","contentUrl":"https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2025\/08\/Thumbnail-_28_.avif","width":1280,"height":720,"caption":"Firebase Logo"},{"@type":"BreadcrumbList","@id":"https:\/\/ciit-training.com\/2025\/08\/21\/how-firebase-enabled-us-to-built-a-quiz-app-in-hours-without-a-backend\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ciit-training.com\/"},{"@type":"ListItem","position":2,"name":"How Firebase Enabled Us to Build a Quiz App in Hours Without a Backend"}]},{"@type":"WebSite","@id":"https:\/\/ciit-training.com\/#website","url":"https:\/\/ciit-training.com\/","name":"CIIT Training","description":"Java training","publisher":{"@id":"https:\/\/ciit-training.com\/#organization"},"alternateName":"Javatraining","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ciit-training.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ciit-training.com\/#organization","name":"CIIT GmbH","alternateName":"Schaffler & Gl\u00f6\u00dfl GmbH","url":"https:\/\/ciit-training.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ciit-training.com\/#\/schema\/logo\/image\/","url":"https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2023\/11\/CIIT_Logo_BrightBackground_Blau_ohne_at.png","contentUrl":"https:\/\/ciit-training.com\/wp-content\/uploads\/sites\/2\/2023\/11\/CIIT_Logo_BrightBackground_Blau_ohne_at.png","width":512,"height":512,"caption":"CIIT GmbH"},"image":{"@id":"https:\/\/ciit-training.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javatraining.at","https:\/\/x.com\/JavaTrainingAT","https:\/\/www.linkedin.com\/showcase\/javatraining.at\/"]},{"@type":"Person","@id":"https:\/\/ciit-training.com\/#\/schema\/person\/da3b2b472673dcc7f0933808391c9ccf","name":"wiki","url":"https:\/\/ciit-training.com\/en\/author\/wiki\/"}]}},"_links":{"self":[{"href":"https:\/\/ciit-training.com\/en\/wp-json\/wp\/v2\/posts\/10695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ciit-training.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ciit-training.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ciit-training.com\/en\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/ciit-training.com\/en\/wp-json\/wp\/v2\/comments?post=10695"}],"version-history":[{"count":0,"href":"https:\/\/ciit-training.com\/en\/wp-json\/wp\/v2\/posts\/10695\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ciit-training.com\/en\/wp-json\/wp\/v2\/media\/10713"}],"wp:attachment":[{"href":"https:\/\/ciit-training.com\/en\/wp-json\/wp\/v2\/media?parent=10695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ciit-training.com\/en\/wp-json\/wp\/v2\/categories?post=10695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ciit-training.com\/en\/wp-json\/wp\/v2\/tags?post=10695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}