Skip to content

A full-stack daily photo challenge monorepo to encourage students to capture moments in nature

Notifications You must be signed in to change notification settings

emirdur/seekitnu

Repository files navigation

seekitnu

This website encourages college students, particularly those affected by myopia to step outside and seek a given task. The user should take a picture of the description in the prompt given and upload it before the task resets.

Preview

Here's a preview of a single user interface flow:

login upload
home account

Features

  • Users can like each others images to decide on the best image of the day.
  • At the end of the day a winner is determined and changes are reflected by the leaderboard.
  • Tasks are generated daily by OpenAI GPT-4o.

Technologies Used

  • Frontend: React, TypeScript, CSS, Firebase, OpenAI
  • Backend: Node.js, Express, PostgreSQL
  • Database: PostgreSQL, Prisma
  • Containerization: Docker
  • Hosting: AWS (S3, RDS, ECR/ECS/EC2, Route 53/Certificate Manager, CloudWatch)

Prerequisites

To run this app locally, you’ll need to have the following installed:

Getting Started

Follow these steps to get a local development copy up and running.

1. Clone the Repository

git clone https://github.com/emirdur/seekitnu.git
cd seekitnu

2. Pull a PostgreSQL Docker Image

Find a PostgreSQL Docker image and download it. Set up the username, password, and database name according to your preference, or use the default configuration (postgres, postgres, postgres). Make sure to update the docker-compose.yml, the backend Dockerfile, and the environment variables accordingly. Additionally, generate an .env and .env.docker file in the backend with the necessary database environment variables, ensuring the database name points to localhost in .env and the database name points to database in .env.docker.

3. Integrate Firebase Authentication

Next, sign up for a Firebase account, as authentication is handled through this service provider. Once you've signed up, create a new project to obtain your configuration keys. Be sure to copy these keys and store them in an environment variable file within the frontend directory. Lastly, navigate to the Authentication section and enable the Email/Password sign-up method.

4. Bridge OpenAI

The way this application works is by relying on OpenAI to generate the tasks, and then falling back on a CSV file in case there's any fetch fails with the OpenAI API. Therefore, you must sign up for an OpenAI API account and add the configuration key to the .env file in the backend if you'd like to use this service. If you want to skip that part you can simply update the CSV file provided with some example tasks.

5. Containerize the application

To containerize the application you can call:

npm run docker:containerize:dev

This will generate and boot up the frontend, backend, and PostgreSQL images.

6. Run the frontend

You can start up the website by calling:

npm run dev:frontend

7. Run tests

You can run tests by simply calling:

npm test

8. Generate the documentation

Follow these steps to see an explanation of what each object does. First generate the documentation:

npm run docs:generate
npm run docs:serve

Then open the localhost outputted to view the documentation!

About

A full-stack daily photo challenge monorepo to encourage students to capture moments in nature

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published