Skip to main content
GroupCalendar home page screenshot - banner with turquoise background, app slogan ('Plan and collaborate on events with your group'), app sample image on tablet device, Try Demo button


GroupCalendar is a Laravel web app that helps you organize friends and colleagues into private groups so that you can plan upcoming events together. Users can join many groups and events created in groups are visible only to other group members.

The GroupCalendar website is designed to make creating and collaborating on group events easy and intuitive.

Technologies: Laravel, Vue.js, MySQL, PHP, HTML5, CSS3

GroupCalendar Event form screenshot with datepicker widget open

Event Planning

Datepicker Calendar

The New and Edit Event forms feature a datepicker calendar tool so that users can visually pick their event dates. The calendar also shows any events from the organizer's other groups so that they can avoid scheduling conflicts.

Location Autocomplete

Another component of the Event forms is the Google Maps Autocomplete widget which lets the organizer quickly set their location by typing a name or address and selecting their result from the autocomplete list. In addition, Google Maps provides a static map image for the Event Flyer PDF once the event is created.

Event Header Image

Organizers can customize the look of the event by selecting a header image from a collection of stock images. The header image is displayed prominently on the Event Details page and the Event Flyer PDF.

Event Flyers

Every event includes an automatically generated PDF flyer which users can download and share. The flyer lists all of the event details and prominently features the event's header image, as well as a map of the event's location.

Group Calendar Event Details page screenshot showing Comment and Attendee sections

Group Collaboration

Once the event is created, group members can collaborate by adding comments and setting their attendee status for the event. The organizer and group admins can update the event based on the group's feedback.

The Edit Event form also includes a comment field so that the organizer can add an event comment upon submission and directly inform group members about their changes.

In addition, GroupCalendar features a robust notification system so group members receive immediate feedback about new comments and event updates.

User Experience

Group Calendar User Dashboard screenshot including My Upcoming Events, My Groups, and sidebar navigation
User Dashboard Page

GroupCalendar is designed to be simple to navigate and quickly find details about group events. Every page features a prominent page title, breadcrumb trail, and contextual sidebar navigation.

User Dashboard

When a user logs into GroupCalendar, they are shown their personal dashboard which lists the groups they belong to and a scrollable list of upcoming events in their groups.

My Events Page

The My Events page aggregates all of the events in the user's groups into one event list, separated by month. The page displays relevant details of events including the name, date, location city and state, group name, and the user's current attendee status. The events listed are also separated into Upcoming and Past Events tabs.

Group Calendar My Events page screenshot showing list of events in the user's groups
My Events Page

The sidebar menus are displayed based on the context of the page. For example, the Event Details page features a sidebar menu with Edit and Delete Event links. These links are visible if the user is authorized to update the event.

Below the event navigation menu is a group menu with links relevant to the group that the event takes place in. Below that menu is the user navigation menu which includes links relevant to the user.

Demo Mode

GroupCalendar includes a demo mode to quickly try out the website's functionality. When you visit the demo page, you are automatically logged into a randomly generated test account.

Demo accounts are members of preset demo groups and are able to create events, leave comments, and set their attendee status on events. Other functionality including creating and leaving groups is disabled for demo accounts.


Group Calendar Group page screenshot displaying the overall card based design of the website, including group details, group upcoming events, group comments, recent members, and sidebar navigation
Group Home Page

GroupCalendar uses a card based design built with Flexbox to visually separate different sections. This layout is also designed to responsively resize based on the user's screen size without losing functionality. For example, the sidebar navigation menus collapse and become part of the header navigation on smaller screens.

The website's color scheme includes shades of white and grey for most of the page content and turquoise for card headers, borders, and emphasis.

Additionally, SVG icons are used to add extra flair to buttons, links, tabs, etc.

GroupCalendar home page screenshot - banner with turquoise background, app slogan ('Plan and collaborate on events with your group'), app sample image on tablet device, Try Demo button
The GroupCalendar Landing Page

The landing page is designed to be eye-catching and noticeable by making heavy use of the emphasis color in a hero banner design. The landing page is also meant to show off the features of GroupCalendar so it includes prominent screenshots of the app.

Technical Details

Laravel Framework

GroupCalendar is built with the Laravel Framework. Laravel follows a model-view-controller pattern to divide the different aspects of the application into interconnected parts. Database tables are accessed and updated using Eloquent ORM. Laravel also manages the routing and controller actions that occur when a page view is requested and rendered.

Page Authorization

Many aspects of GroupCalendar are only available to a user if they are authorized to access them. For example, groups are private and only group members have authorization to view the group pages.

Authorization in GroupCalendar is defined and managed using Laravel's authorization policies and gates. When a user tries to visit a page, their authorization for that page is automatically checked by middleware on the page route. Based on the user's privileges, they are either allowed to view the page or they are automatically redirected to a 403 Not Authorized status page.

Additionally, the navigation links in the sidebar menus are displayed based on the user's privileges. When a group admin or event organizer visits the Details page for an event, they are authorized to edit or delete the event, so the Edit and Delete Event sidebar links are rendered. However, normal members are not authorized to make changes to the event, so the website doesn't render links they can't use.

Frontend Rendering

GroupCalendar pages are built using a combination of Laravel Blade templates and Vue.js components. Blade templates render the base layout of a page including any data retrieved from the database. Vue.js widgets are then used to enhance the page and add interactive elements.

These Vue.js widgets are designed to gracefully fallback to normal HTML elements if JavaScript is unavailable. For example, the New and Edit Event forms feature location autocomplete and datepicker calendar widgets which use Vue.js to handle custom user interaction. If JavaScript is unavailable, the location autocomplete will render as several text fields so the user can manually enter the location name, address, city and state.

Another example is the image selection popup used for picking event header images and profile avatars. With JavaScript enabled, the user sees a modal popup with images displayed in a grid. If JavaScript is disabled, the page shows a scrolling list of the same images with radio buttons under each image so the user can still select an image.

Accessibility Considerations

The website aims to be fully accessible via keyboard. Interactive Vue.js components that normally function with mouse clicks also support Enter and Space key presses.

For example, the calendar datepicker widgets on the event forms can be navigated by clicking the previous/next month buttons or by using the arrow keys. The Left and Right arrow keys move the selected date by one day, while the Up and Down arrow keys will move the date by one week. When the user is ready to select their event date they can click the day in the calendar or use the Enter or Space keys.

To compliment keyboard navigation throughout the website, elements on the page are styled with emphasis when focused so the user can visually see where they are when navigating with the Tab key.

Browser Support

Although GroupCalendar uses Vue.js JavaScript components, the graceful fallback when JavaScript is disabled allows the site to operate even on browsers Vue.js doesn't support. However, the design of GroupCalendar makes heavy use of Flexbox, which limits the browser compatibility to Internet Explorer 10 and above.