Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Survey Full Stack

A historical full-stack survey application that demonstrates an end-to-end React, Redux, Express, Firebase Functions, and Cloud Firestore workflow.

React 16.8.6 Redux 4.0.4 Node.js 8 Express 4.17.1 Firebase Cloud Functions Cloud Firestore

Project status

Historical project — not production-ready.

The implementation belongs to 2019. The 2026 portfolio refresh documents the original system without presenting its runtime, dependencies, deployment, privacy posture, or availability as current.

Original period

  • Original development: 2019-07-19 to 2019-10-30
  • Portfolio refresh: 2026
  • Repository branch: master
  • Release history: no repository releases were found during the audit

Overview

Survey Full Stack is a two-part web application. A React client retrieves a fixed survey, captures ten 1–7 responses plus an email address, submits the answer payload to an Express API hosted as a Firebase HTTPS Function, stores the result in Cloud Firestore, and displays a four-letter perspective type.

Why this project matters

This repository is useful as evidence of early software-engineering foundations: component-based UI work, centralized client state, asynchronous API calls, server-side routing and controllers, model shaping, persistence, and a hosted frontend/backend boundary.

It should be read as a historical learning project rather than as evidence of a modern production security or dependency baseline.

What it demonstrates

  • A complete browser-to-database request path
  • React components and Material UI composition
  • Redux state, reducers, actions, and thunk middleware
  • Axios-based API integration
  • Express routes, controllers, and model functions
  • Firebase HTTPS Functions in us-central1
  • Cloud Firestore persistence through firebase-admin
  • Firebase Hosting configuration with a single-page application rewrite
  • A small deterministic scoring function that produces a four-letter result

User flow

  1. The application loads the survey with the fixed identifier surveymbti2019jul.
  2. The user answers ten questions using a seven-point disagree/agree scale.
  3. The user enters an email address.
  4. The client creates a result identifier and posts the survey payload.
  5. The backend normalizes the payload, computes the four-letter result, and writes it to Firestore.
  6. The client displays the result and allows the user to start a new test.

Architecture

Firebase Hosting
  → browser
  → React components
  → Redux actions and state
  → Axios HTTP client
  → Firebase HTTPS Function (us-central1)
  → Express application
  → API routes
  → controllers and model functions
  → Cloud Firestore

See docs/architecture.md for verified evidence, boundaries, and open questions.

Frontend

The client lives under survey-fullstack/frontend-app and was generated from the Create React App ecosystem. Its verified manifest includes React 16.8.6, React DOM 16.8.6, Redux 4.0.4, React Redux 7.1.0, Redux Thunk 2.3.0, Axios 0.19.0, React Scripts 3.0.1, and Material UI packages.

The main UI consists of a navbar, a two-step survey/results flow, a ten-question form, an email field, and a result visualization.

Backend

The backend lives under survey-fullstack/backend-app/functions. It uses CommonJS modules, Express 4.17.1, Firebase Functions 3.1.0, Firebase Admin 8.0.0, body-parser, and CORS. Its manifest explicitly declares Node.js 8.

The exported Firebase function is named api and is configured for us-central1.

API contract

All routes are mounted at the Express root. No authentication middleware was found.

Method Route Verified behavior
POST /survey Shapes and writes a survey document using the supplied survey ID.
GET /surveys Returns all survey documents.
GET /survey/:surveyId Returns one survey document or a 404 response.
POST /result Shapes an answer, computes the four-letter result, and writes it using the supplied result ID.
GET /results Returns all result documents.
GET /result/:resultId Returns the four-letter result for one document.

The historical API should not be exposed publicly without authentication, authorization, input validation, privacy review, and data minimization.

Persistence

Persistence is Cloud Firestore, initialized through firebase-admin with the Firebase runtime's default application context. The code uses two collections:

  • surveys
  • results

Result documents include the result ID, survey ID, user value, server timestamp, scoring arrays, answers, and computed result. The current source embeds the submitted email in the generated result identifier, which is a privacy concern and should be removed before any renewed deployment.

Repository structure

.
├── README.md
└── survey-fullstack
    ├── backend-app
    │   ├── firebase.json
    │   └── functions
    │       ├── app.js
    │       ├── controllers
    │       ├── index.js
    │       ├── models
    │       ├── routes
    │       └── util
    └── frontend-app
        ├── firebase.json
        ├── public
        └── src
            ├── components
            ├── redux
            └── utils

The nested survey-fullstack directory is part of the original repository layout.

Local setup

This is a historical reproduction path, not a supported modern setup.

The backend manifest pins Node.js 8. Do not install an unsupported runtime globally on a workstation. Use an isolated container, version manager, or disposable development environment if historical reproduction is required.

Frontend commands recorded by the manifest:

cd survey-fullstack/frontend-app
npm ci
npm test -- --watchAll=false
npm run build
npm start

Backend commands recorded by the manifest:

cd survey-fullstack/backend-app/functions
npm ci
npm run serve

These commands were not successfully re-executed during the 2026 audit. The repository requires a dedicated legacy-runtime reproduction effort before they can be described as working.

Environment variables

No .env file, .env.example, or application-level environment-variable contract was found in the inspected tree.

The backend relies on Firebase runtime credentials through firebase-admin. The frontend stores its API base URL directly in source. A modernized implementation should use explicit environment configuration and must not commit credentials.

Example workflow

GET /survey/surveymbti2019jul
  → render ten questions
  → collect answers and email
POST /result
  → compute perspective type
  → write result document
  → return result
  → render four-letter output

Verified outputs

The code verifiably produces a four-letter string from the EI, SN, TF, and JP dimensions and renders it in the results view. The repository does not contain verified usage metrics, test coverage, performance results, production-readiness evidence, or release artifacts.

A commented manual test block documents several expected outputs and one known mismatch for a test case. That mismatch remains a declared historical limitation rather than a validated fix.

My role

The five inspected commits are authored by the HubertRonald GitHub identity, and the original README attributes the code to Hubert Ronald. The evidence therefore supports describing the repository as an individual full-stack implementation.

Team context

No co-author or collaborator appears in the inspected five-commit master history. The README calls the work an “Engineering Challenge,” but the repository does not identify the organization, evaluator, team, or original requirements. Those details remain unverified.

Limitations

  • Node.js 8 and the original dependency set are obsolete.
  • No authentication or authorization layer was found.
  • CORS is enabled without an origin allowlist.
  • Result records contain a user field, and the client derives result IDs from the submitted email.
  • Collection-wide read routes exist for both surveys and results.
  • Server-side schema validation is minimal and trusts client-supplied scoring arrays.
  • The frontend email validation accepts malformed non-empty values because of its boolean condition.
  • Only the default Create React App render smoke test was found; no backend test suite was found.
  • A commented scoring test records one expected/actual mismatch.
  • No license, .gitignore, screenshots, formal API specification, deployment runbook, or data-retention policy was found.
  • Functional availability of the historical backend was not verified during the 2026 audit.

See docs/limitations.md for details.

Historical context

The implementation was added on 2019-07-19. Three README-only commits on 2019-10-30 added the hosted link and author attribution. No later implementation commit was found in the inspected history.

See docs/historical-context.md.

Modernization note

The 2026 refresh is documentation-first. It does not silently upgrade Node, React, Firebase, lockfiles, security behavior, or the deployment.

A future modernization should be a separate, explicitly dated effort that starts with privacy remediation, API access control, deletion or anonymization of historical personal data, runtime and dependency upgrades, tests, emulator-based validation, and deployment ownership review.

Current status

  • Recommended portfolio status: Historical
  • Atlas readiness: Not ready
  • Historical hosting: The original Firebase Hosting deployment from July 2019 remains reachable through the project's web.app and firebaseapp.com domains.
  • Observed behavior on 2026-08-03: Firebase Hosting served the original HTML, CSS, and JavaScript assets, but the React interface rendered a blank page. The application could not be validated as an operational end-to-end demo.
  • Firebase data services: The Firebase database services reviewed in the project console appeared disabled. This review does not establish whether historical data existed previously or when it may have been removed.
  • 2026 refresh scope: No application source was repaired, no legacy dependencies were restored, no new frontend build was produced, and nothing was redeployed to Firebase.
  • Primary blockers: functional reproduction, confirmation of the historical Cloud Function status, license ownership, questionnaire provenance, and security/privacy remediation before any future redeployment.

The hosted URLs are preserved as evidence of the historical deployment, not presented as a currently functional live demo.

License

No license file or license declaration was found. Until the repository owner adds a license, the source should be treated as all rights reserved. A license must not be inferred from public visibility.

Related links

About

Historical full-stack survey application built with React, Redux, Express, Firebase Functions, and Cloud Firestore.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Used by

Contributors

Languages