https://usetrmnl.com/blog/calendar-hackathon
- connect any calendar inside TRMNL > Plugins
- fetch your* data from the endpoint below
- design a better calendar, with markup for all 4 view layouts
- export your plugin
- email it to hackathon@usetrmnl.com by Monday, April 14 at 5p ET
legal disclaimer
Entrants retain ownership of all intellectual and industrial property rights (including moral rights) in and to Submissions.
As a condition of submission, Entrant grants the Hackathon Organizer, its subsidiaries, agents and partner companies, a perpetual, irrevocable, worldwide, royalty-free, and non-exclusive license to use, reproduce, adapt, modify, publish, distribute, publicly perform, create a derivative work from, and publicly display the Submission.
Entrants provide Submissions on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
to iterate quickly, we suggest creating a private plugin inside TRMNL > Plugins > Private Plugin. select "Polling" strategy, then provide the URL below. if you prefer to develop locally, check out tmrnlp: https://github.com/usetrmnl/trmnlp
# first get your calendar's plugin_setting ID from the URL bar of the settings page
https://usetrmnl.com/api/plugin_settings/<calendar_plugin_setting_id>/data
next, input the following "Headers" into the corresponding textarea:
# first create a User API key at usetrmnl.com/account
authorization=bearer <your-user-api-key>
parsed events will appear inside a data
node of the JSON response, like the sample events in footnotes
below.
starter markup?
get a head start on modding our existing layouts by grabbing the markup here (requires login):
can i enter more than once?
yes, but each submission should include all 4x layouts, unique to the other submissions.
i know see all my events, or event details
response content from the endpoint above will include or exclude various parameters based on the preferences you selected on the calendar settings page. if you prefer to design a month layout, select "Month" and then click "Force Refresh" on your calendar plugin to update the JSON response.
i don't want to use FullCalendar, or your Design System
no worries. build with any tooling you'd like.
something else...
email us - hackathon@usetrmnl.com and we'll update this Gist for everyone else.
*
if you don't have a compatible calendar, or don't feel comfortable using your own data, here's demo JSON you can paste into a private plugin with the static
strategy:
{"data":
{"events":
{"April 09":
[{"end": "10:00",
"start": "11:00",
"status": "confirmed",
"all_day": true,
"summary": "Michael OOO",
"end_full": "2025-04-12",
"start_full": "2025-04-09",
"description": "Headed to the Bahamas"},
{"end": "11:00",
"start": "10:00",
"status": "confirmed",
"summary": "Monthly Catchup with Dev Team",
"end_full": "2025-04-10T00:00:00.000+00:00",
"start_full": "2025-04-09T19:00:00.000-04:00",
"description": "Discuss progress and obstacles with the development team"},
{"end": "18:30",
"start": "13:00",
"status": "confirmed",
"summary": "Meeting with Investors",
"end_full": "2025-04-09T13:30:00.000+00:00",
"start_full": "2025-04-09T08:00:00.000-04:00",
"description": "Quarterly meeting to review financials and forecasts with key investors"},
{"end": "16:00",
"start": "15:00",
"status": "confirmed",
"summary": "Gratitude Standup",
"end_full": "2025-04-09T16:00:00.000+00:00",
"start_full": "2025-04-09T11:00:00.000-04:00",
"description": "Hello everyone! It's officially a good day."},
{"end": "20:15",
"start": "19:45",
"status": "confirmed",
"summary": "Bath",
"end_full": "2025-04-09T20:15:00.000+00:00",
"start_full": "2025-04-09T15:45:00.000-04:00",
"description": "Clean!"},
{"end": "23:59",
"start": "23:30",
"status": "confirmed",
"summary": "Read a book",
"end_full": "2025-04-09T23:59:00.000+00:00",
"start_full": "2025-04-09T19:30:00.000-04:00",
"description": "Get smarter"}],
"April 10":
[{"end": "13:00",
"start": "08:15",
"status": "confirmed",
"summary": "Quarterly Strategy Meeting",
"end_full": "2025-04-10T13:00:00.000+00:00",
"start_full": "2025-04-10T04:15:00.000-04:00",
"description": "Extended meeting to review and plan company strategy for the next quarter."},
{"end": "16:00",
"start": "14:30",
"status": "confirmed",
"all_day": true,
"summary": "Project Kickoff",
"end_full": "2025-04-10T16:00:00.000+00:00",
"start_full": "2025-04-10T10:30:00.000-04:00",
"description": "Kickoff meeting for the new client project."}],
"April 12":
[{"end": "12:00",
"start": "11:00",
"status": "confirmed",
"summary": "Code Review",
"end_full": "2025-04-12T12:00:00.000+00:00",
"start_full": "2025-04-12T07:00:00.000-04:00",
"description": "Review and discuss recent code changes with the development team."},
{"end": "17:00",
"start": "13:00",
"status": "confirmed",
"summary": "Hackathon",
"end_full": "2025-04-12T17:00:00.000+00:00",
"start_full": "2025-04-12T09:00:00.000-04:00",
"description": "Team hackathon to explore innovative ideas and build prototypes."}],
"April 13":
[{"end": "14:00",
"start": "10:00",
"status": "confirmed",
"summary": "All-Hands Meeting",
"end_full": "2025-04-13T14:00:00.000+00:00",
"start_full": "2025-04-13T06:00:00.000-04:00",
"description": "Company-wide meeting to discuss updates, goals, and celebrate achievements."},
{"end": "16:30",
"start": "15:00",
"status": "confirmed",
"summary": "Training Session",
"end_full": "2025-04-13T16:30:00.000+00:00",
"start_full": "2025-04-13T11:00:00.000-04:00",
"description": "Training on new development tools and methodologies."}],
"April 14":
[{"end": "11:00",
"start": "09:30",
"status": "confirmed",
"summary": "Sprint Planning",
"end_full": "2025-04-14T11:00:00.000+00:00",
"start_full": "2025-04-14T05:30:00.000-04:00",
"description": "Plan tasks and goals for the upcoming sprint."},
{"end": "15:00",
"start": "14:30",
"status": "confirmed",
"summary": "One-on-One with John",
"end_full": "2025-04-14T15:00:00.000+00:00",
"start_full": "2025-04-14T10:30:00.000-04:00",
"description": "Weekly check-in with team members."}],
"April 15":
[{"end": "17:00",
"start": "16:00",
"status": "confirmed",
"summary": "Weekly Review",
"end_full": "2025-04-15T17:00:00.000+00:00",
"start_full": "2025-04-15T12:00:00.000-04:00",
"description": "Review progress and plan for the upcoming week."},
{"end": "19:00",
"start": "17:30",
"status": "confirmed",
"summary": "Team Building",
"end_full": "2025-04-15T19:00:00.000+00:00",
"start_full": "2025-04-15T13:30:00.000-04:00",
"description": "Fun team-building activity to end the week."}]},
"first_day": 1,
"scroll_time": "11:00",
"today_in_tz": "2025-04-09",
"event_layout": "week",
"instance_name": "Custom Calendar",
"include_description": true}}
I assume "end" and "start" are flipped by accident here rather than this being a case of night owl investors 🦉