Coder Social home page Coder Social logo

team-carbonara's Introduction

Calendapp

Calendapp is a web application inspired by Calendly to allow users to schedule meetings more easily. We also utilize Google Calendar API to ensure there are no conflicts in your schedule.

Now deployed on heroku at calendappy.herokuapp.com

Tech Stack: MongoDB, Express.js, React.js, Node.js

Contributors: Raymond Lo, Jenny Kam


Getting Started

  1. Clone or download repository

  2. Run npm i in both client and root directories to install packages

  3. Create your API Keys and .env files - See client and server sample.env for more instructions

    • client/.env file
    • .env file
  4. To start the two processes, run npm start in the client directory, and npm run dev in the root directory


Demo

  1. Login or Register with your Google Account. As a new user you will enter your availability to be scheduled for meetings (ex.9am-5pm, Mon-Fri) and to create a unique url to be shared with potential meeting attendees.

Login Demo

  1. Share the unique link for a meeting type with others so they can schedule an appointment.

Open Calendar URL

  1. People who want to meet with you will be able to schedule an appointment. Appointments will be added to the invitee's and your google calendar, and an email notice will be sent to you.

Schedule appointment


Extra Features

  1. Subscribing will allow users to create multiple event types, in addition to the default 60 minute meeting.

Subscription

  1. Create new meeting types after subscription

Create new meetings

  1. Cancel appointments. The event will also be removed from your google calendar and guests will be notified.

Cancel Appointments

team-carbonara's People

Contributors

rayy-lo avatar jk-me avatar jncodes avatar bonnieli avatar

Stargazers

 avatar  avatar Can Gündüz avatar  avatar cocoonk1d avatar Aaliya Haque avatar Anselmo Sammarco Nunes avatar  avatar Rechner Fox avatar Prithvi Rey avatar Sawrav Chowdhury avatar Gîanfranco P avatar F35X avatar Mark Turner avatar Iago Nunes avatar  avatar Venky B avatar

Watchers

James Cloos avatar

team-carbonara's Issues

FE: Onboarding Pages

There are 3 pages to onboarding

/profile_settings -> unique url and timezone

  • check for uniqueness to continue
  • storing timezone in UTC

/confirm -> confirmation of successful connect
/availability -> setting availability hours and days

BE: Appointment Model

Create Appointment Model

Appointment

  • meeting_id
  • name
  • email
  • time (datetime)
  • timezone

BE: Availability Controllers GET /availability

Create a route that:

  • Loads availability for given day (GET /availability?day=2342343243)
  • Returns a list of available slots

Google Calendar API

  • /freeBusy timeMin, timeMax

Each date you select, it’ll load the appointment slots available

[
{start_time: 2323234, end_time: 234234},
{start_time: 2323234, end_time: 234234},
{start_time: 2323234, end_time: 234234},
...
]

IN: Onboarding

After the onboarding routes for the backend and onboarding frontend is done, integrate

BE: Appointment Controllers

  • CREATE /appointment -> Create an appointment
    • meeting_id, name, email, time (datetime), timezone
  • GET /appointments -> list of appointments for logged in user

FE: Confirm Appointment

When time is selected, confirm time and schedule (create appointment BE)

  • Not in mocks, create a dialog for confirmation

  • Email

  • Name

  • Confirm button

FE: Scheduler Calendar UI

Frontend

  • Block off unavailable days
  • Preselect the next day
  • Block off time that is unavailable for the user (appointment time slots blocked off state)
  • When time is selected, confirm time and schedule (create appointment BE)

FE: Signup / Login Pages

  • create two front-end react routers (login and signup)
  • There is no landing page - redirect to signup

FE: Gating Features based on user type

Gating feature: creating new calendar
Standard: you only get the default

  • You shouldn’t see “new meeting” button
    Premium: you can create as many calendar as you want
  • FE: If not premium, hide new meeting button

FE: Upgrade page

Upgrade your account

Ignore some information from the mocks. Instead have two blocks:

  1. FREE STANDARD (this is by default) no need for payment
  2. PREMIUM ACCOUNT (payment) -> leads to Stripe checkout page

BE: Meeting Model

Create Model for Meeting

Meeting

  • user_id
  • duration (15, 30, 45) -> these are in minutes

BE: User Controllers

  • GET /user/:id/is_unique?url=<> -> checks if url is unique amongst other users

  • UPDATE /user/:id -> updates user information

BE: Meeting Controller

  • CREATE /meeting -> Create a meeting
  • GET /meetings -> list of meetings for logged in user

be: tokens fix

store tokens and expiry time from src/App.js user.getAuthResponse()
check gcal api requests

Frontend: Change timezone on calendar

On calendar view, have the ability to change your timezone.

On change, it should re-render the time availability based on the selected timezone.
For example, by default if my timezone is EST, then I see an available slot for 9am.
If I change it to PST, then it will rerender and now I see an available slot for 6am

How do i run this for server side?

When i run the client npm i then start i get an error after attempting to login (i get a proxy error between 3000 and 3001 local host.) I am not sure how to do the server part because their are no server folders. Thank you

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.