Giter VIP home page Giter VIP logo

labs8-developermap's Introduction

Developer Heat Map

MIT code style: prettier

Table of Contents

Frontend built using:

  • React.js
  • Styled-components
  • Netlify

Deployed here

Backend built using:

  • Firebase
  • Node.js
  • Express

Deployed here

Reasoning:

  • React.js

    • SPA: Single page app fits the React
    • Because the various views are communicated through modals, a component based library is the best set of tools for content delivery. Each modal is a component.
    • Multiple modals, react gives us freedom to make our own naming conventions, easier to find areas of the website based on naming
    • Because we will be updating multiple views, and not a single view multiple times, React’s server side rendering is faster than other SPA client side rendering alternatives.
  • Firebase

    • Built in Authentication
    • Data updates real-time
    • Massive storage size potential (scalability)
    • Allows us to add/change features without having to change a schema
  • Express

    • Unopinionated framework, which allows us to write our code with less restrictions
    • Due to its wide use, support, and relatively long history, express is considered ‘battle-tested’ in that we are less likely to encounter bugs.
    • Works with JSON, firebase data is a json tree
  • Node.js

    • Allows us to develop both our front-end and back-end in the same language and avoid context switching

Documentation

Structure

Index

(Alphabetical)

Contents

Client


The client/frontend of the project.

Files: .gitignore, package.json, README.md, yarn.lock

  • public

    The HTML file containing the root element that MappaJob will be rendered to.

    Files: favicon.png, index.html, manifest.json, mappa.ico

  • src

    The components of MappaJob, additionally including all images, styles, firebase client configuration, root render files (App.js, index.js), and the component reducer.

    Files: App.js, App.test.js, index.js, reducer.js, serviceWorker.js

    • components

      The folders holding each component file used in MappaJob, primarily organized by Modal.

      Files: No immediate files.

      • EmployerProfile

        The component files and styles used in the employer profile modal which shows up after clicking on an employer marker on the map, and clicking 'Learn More'.

        Files: EmployerPostings.js, EmployerProfile.js, EmployerStyles.js, JobPostings.js

      • LandingPage

        The component files and styles used on the Landing Page of MappaJob, which displays the map, and the geocoder (search functionality).

        Files: LandingPage.js, MapWindowStyle.js

      • Loading

        The component files, images, and styles used in the Loading modal.

        Files: Loading.js, LoadingStyles.js, map-smol.png, map.PNG, SpinningGlobe.js

      • NavBar

        The component files and styles used in the Navigation Bar.

        Files: NavBarStyles.js, NavBarView.js

      • ErrorModals

        The component files and styles for a component that will display if information is requested from a user that no longer exists in the database.

        Files: NoUser.js, NoUserStyle.js, AlertModal.js, AlertStyle.js

      • Seeker

        Primarily the component files and styles for the Seeker Favorites modal.

        Files: Favorite.js, SeekerFavorites.js, SeekerSettings.js

      • SeekerProfile

        The component files and styles used in the job seeker profile modal which shows up after clicking on a job seeker marker on the map, and clicking 'Learn More'.

        Files: ProfileModalStyle.js, SeekerProfile.js

      • Settings

        The Settings component, and folders holding the routes for Seeker Settings and Employer Settings.

        Files: EmployerSettings.js, SeekerSettings.js, Settings.js

      • SignIn

        The component files and styles used in the Sign In modal.

        Files: SignIn.js

      • SignUp

        The SignUp component, and folders holding the routes for the various forms and signup steps.

        Files: SignUp.js

        • Forms

          The routes/components for Seeker Signup and Employer Signup.

          Files: EmployerSignUp.js, SeekerSignUp.js

        • Types

          The routes/components for the steps of the signup process wherein you choose your signup method (email or 3rd party) and identify whether you are a job seeker or employer.

          Files: SignUpTypes.js, SignUpUserTypes.js

      • Stripe

        The configuration file for the client-side stripe integration.

        Files: Checkout.js

      • Tutorial

        The tutorial component and the routes for the various parts of the tutorial.

        Files: ComProfileGuide.js, DevProfileGuide.js, EditSettings.js, GettingStarted.js, Intro.js, Navigation.js, TutorialIntro.js, UsingMarkers.js

    • firebase

      The configuration file for the client-side firebase integration.

      Files: firebase.js

    • images

      The configuration file for the client-side firebase integration.

      Files: avatar-icon.jpg, contact.PNG, edit.png,. favheart.png, favicon.PNG, favorites-icon.png, gear.png, gear.svg, hollow-heart.png, jobs.PNG, links.PNG, logout.png, logout1.png, mainlogo.png, Marker.png, markerlogo.png, markerlogo4.png, markerlogo9.png, markerPic.png, navsearch.PNG, newsignin.PNG, Pinch_zoom.png, planet.png, plusssign.png, question.png, sorc.PNG, styled.PNG, titleTab.png.

      • Icons

        Icon images

        Files: icons8-computer-monitor.png, icons8-github.png, icons8-linkedin-filled.png, icons8-phone-26.png, icons8-resume.png, icons8-twitter-filled.png

      • signup

        3rd party authentication buttons

        Files: [email protected], [email protected], btn_google_signin_light_normal_web.png, [email protected], btn_google_signin_light_pressed_web.png, [email protected]

    • styles

      The global styles used throughout MappaJob.

      Files: AppStyle.js, GlobalStyle.js, index.js, ModalGlobalStyle.js, SettingsStyle.js, SignIn_UpStyle.js



Server


Contains the server/backend of the project.

Files: index.js, package.json, server.js, serverConfig.js, ServerDocs.md, yarn.lock

  • auth

    The autorization middleware that assigns a token and claim to new users.

    Files: authMiddleware.js

  • companies

    The endpoints used to retrieve and manipulate data associated with companies in the database.

    Files: companiesRouters.js

  • constants

    Constants used by the stripe routes to interact with the stripe API.

    Files: frontend.js, stripe.js

  • conversations

    The endpoints used to retrieve and manipulate data associated with conversations in the database.

    Files: conversationsRouters.js

  • firebase

    The configuration files for the client-side firebase integration.

    Files: .firebaserc, .gitignore, database.rules.json, firebase.js, firebase.json, serviceAccountKey.json, storage.rules

    • functions

      The Cloud Functions for firebase.

      Files: firebase.js, index.js, package.json, serviceAccountKey.json, yarn.lock

  • markers

    The endpoints and middleware used to retrieve and manipulate data associated with markers in the database.

    Files: markersMiddleware.js, MarkersRouters.js

  • seekers

    The endpoints used to retrieve and manipulate data associated with seekers, and their favorites, in the database.

    Files: favoritesRoutes.js, seekersRouters.js

  • stripe-routes

    The routes and server configuration that interact with the api.

    Files: index.js, payment.js

  • users

    The endpoints used to retrieve and manipulate data associated with all users in the database (Not currently used).

    Files: userRouters.js



Models

User Model

The user model is broken up into two different objects that are labels companies and seekers. The companies object is created for companies registered through the app, and seekers are the job seekers that are registered through the app. All objects are created through firebase and are only accessible through admin priveledges.

companies object properties (each company has a unique uid):

- companyName = val().isString()
- companyWebsite = val().matches(/^(ht|f)tp(s?):\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*((0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)
- email = isString() && val().matches(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i)
- location = val().isString()
- phoneNumber = val().matches(/^\\d{3}-\\d{3}-\\d{4}$/)

seekers object properties (each seeker has a unique uId):

- email = isString() && val().matches(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i)
- firstName = val().isString()
- github = val().matches(/^(ht|f)tp(s?):\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*((0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)
- jobTitle = val().isString()
- lastName = val().isString()
- linkedIn = val().matches(/^(ht|f)tp(s?):\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*((0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)
- location = val().isString()
- phoneNumber = val().matches(/^\\d{3}-\\d{3}-\\d{4}$/)
- portfolio = val().matches(/^(ht|f)tp(s?):\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*((0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)
- twitter = val().matches(/^(ht|f)tp(s?):\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*((0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)

Markers Model

The markers model contains the geoJSON properties needed to locate users on the map and pin or mark their coordinates. The nested properties object holds the metadata for each marker.

markers object properties (each marker has a unique uid):

- geometry {
    - coordinates
      - 0 = val().isNumber()
      - 1 = val().isNumber()
}
- properties {
    - title = val().isString()
    - uid = val().isString()
}
- type = val().isString()

Company Postings Model

The company posting are related to each company uid.

posting objects are relative to a unique company id

- companyName = val().isString()
- date = val().matches(/^\\d{2}/\\d{2}/\\d{2}$/)
- jobLink = val().matches(/^(ht|f)tp(s?):\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*((0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)
- jobTitle = val().isString()
- location = val().isString()

Testing

For testing in the frontend we have used Jest and Enzyme. Every component has a test suite set up in its own directory and is suffixed with test.js. If changes are made to any one component, please make sure to update the snapshot through your preferred CLI. To do this, run yarn test followed by u.

labs8-developermap's People

Contributors

austinlp4 avatar easyra avatar lnleite avatar rawalpunit avatar serrowxd avatar thebrockstar 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.