Giter Site home page Giter Site logo

barishnamazov / 61040-frontend-starter Goto Github PK

View Code? Open in Web Editor NEW

This project forked from 61040-fa23/frontend-starter

0.0 0.0 0.0 41 KB

Starter code for the frontend assignment in 6.1040.

Home Page: https://61040-frontend-starter.vercel.app

TypeScript 84.71% CSS 1.29% HTML 0.76% Vue 13.24%

61040-frontend-starter's Introduction

6.1040 Social Media Frontend Starter Code

Getting Started

If you are using VSCode/VSCodium, install the ESLint and Prettier extensions. The project is already configured to use ESLint and Prettier, but feel free to add your own rules if you want. Right now, the code is formatted on save; you can change this in .vscode/settings.json by disabling editor.formatOnSave.

As well, you can install Volar + TypeScript Vue Plugin (Volar) extensions.

Run npm install to install dependencies.

Creating MongoDB Atlas Instance

You should already created a MongoDB Atlas Instance for the backend starter code. But you need to copy your .env file from your backend starter code into the root directory of this project. As a reminder:

To run the server, you need to create a MongoDB Atlas instance and connect your project. Feel free to follow the instructions below or use these slides.

  1. Create your MongoDB Atlas account.
  2. When selecting a template, choose the free option, M0.
  3. At the Security Quickstart page, select how you want to authenticate your connection and keep the rest of the defaults. Make sure to allow access to all IPs as shown in this slide.
  4. Once created, click the CONNECT button, select driver, and copy the srv connection string. If using username and password, the url should look something like this: mongodb+srv://<username>:<password>@cluster0.p82ijqd.mongodb.net/?retryWrites=true&w=majority. Make sure to replace username and password with your actual values.
  5. Now go to your project files and create a new file at the root directory called .env (don't forget the 'dot' at the front). Add the line (without < and >)
    MONGO_SRV=<connection url>
    
    to the .env file.

Running Locally

Using two seperate, dedicated terminals:

Run npm run dev:server to start the backend server. This will automatically restart the server code if you make changes to it. In active server development, we recommend you run npm start:server.

Run npm run dev:client to start the client server. Changes to the client code should automatically recompile and hot-reload without needing to restart the client server.

Local Development

You should copy over your concepts/ folder, app.ts, responses.ts, and routes.ts from your backend starter code into the relevant places in server/.

Keep in mind that we are using MongoStore for session management, so your session will be persisted across server restarts.

Under the client/ directory, you can find the frontend starter code and locate to http://localhost:5173 (or whatever port the client server shows in your terminal) to see your app.

Deploying to Vercel

  1. Create a new project on Vercel and link it to your GitHub project.
  2. Under "Build & Development Settings", change "Framework Preset" to Vue.js and "Build Command" to npm run build.
  3. Add the following environment variables to your Vercel project: Key: MONGO_SRV, Value: <your mongo connection string from .env file> Note: only paste the right hand value after = (without < and >), i.e. MONGO_SRV=<your mongo connection string>
  4. Deploy!

Understanding the Structure

The main entry point to the server is api/index.ts. This is how the server is started and how the routes are registered. We would usually put this file under server/, but Vercel requires the entry point to be under api/ directory.

Client Server

The code for the client server is under the client/ directory, which includes the Vue 3 reactive framework, Single Page Application (SPA) Routing via Vue Router, and persistent store and state management via Pinia.

Here's an overview of the files and directories:

  • client/assets contains main.css for defining styles that are applied globally to your app and images/ to store any image files used.
  • client/components contains reusable Vue components used throughout your app to build and compose different parts of the UI.
  • client/router contains index.ts which enables client-side routing by defining and managing the navigation of your app by mapping URLs to different components. Includes navigation guards that allow you to control access to routes and execute code before or after route changes.
  • client/stores contains individual store modules for storage and state management for specific aspects of your app.
  • client/views contains various top-level components that represent the different views or pages of your app. The views are commonly used in conjunction with Vue Router to map specific routes to these view components and render them when the corresponding route is visited.
  • client/App.vue contains the app-level component whose properties are maintained throughout the app.
  • client/main.ts contains the main configuration of the app. You should not edit this file.

Backend Server

The code for the backend server is under the server/ directory, which includes both concept and RESTful API implementations.

Here's an overview of the files and directories:

  • server/concepts contains the concept implementations. Note that we try to keep concepts as modular and generic as possible.
  • server/concepts/errors.ts contains the base error classes you can either directly use or extend from. You are free to add more base errors in that file if you need to (e.g., if your route needs to return I am a teapot error).
  • framework/ contains the framework code that does the magic to convert your route implementations and error handling into Express handlers. You should not edit this directory, but feel free to take a look!
  • server/app.ts contains your app definition (i.e., concept instantiations).
  • server/db.ts contains the MongoDB setup code. You do not need to edit this file.
  • server/routes.ts contains the code for your API routes. Try to keep your route definitions as simple as possible.
  • server/responses.ts contains the code for formatting your responses and errors into a more user-friendly format for the front-end. For example, it would be better if your front-end receives barish is not the author of this post instead of 64e52a1f5ffc7d0d48a0569d is not the author of this post.

61040-frontend-starter's People

Contributors

an-bo-chen avatar barishnamazov avatar pforderique avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.