<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Calendar Invite Server for AWS]]></title><description><![CDATA[Owner of the Calendar Invite Server for AWS ]]></description><link>https://www.calendarinviteserver.com</link><image><url>https://www.calendarinviteserver.com/img/substack.png</url><title>Calendar Invite Server for AWS</title><link>https://www.calendarinviteserver.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 06 May 2026 11:03:19 GMT</lastBuildDate><atom:link href="https://www.calendarinviteserver.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Gregory Hanchin]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[calendarinviteserver@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[calendarinviteserver@substack.com]]></itunes:email><itunes:name><![CDATA[Gregory Hanchin]]></itunes:name></itunes:owner><itunes:author><![CDATA[Gregory Hanchin]]></itunes:author><googleplay:owner><![CDATA[calendarinviteserver@substack.com]]></googleplay:owner><googleplay:email><![CDATA[calendarinviteserver@substack.com]]></googleplay:email><googleplay:author><![CDATA[Gregory Hanchin]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Calendar Invite Server Market Sizing]]></title><description><![CDATA[A first look at categories and landscape]]></description><link>https://www.calendarinviteserver.com/p/calendar-invite-server-market-sizing</link><guid isPermaLink="false">https://www.calendarinviteserver.com/p/calendar-invite-server-market-sizing</guid><dc:creator><![CDATA[Gregory Hanchin]]></dc:creator><pubDate>Thu, 06 Feb 2025 21:13:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KCXm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd80a1d-5de5-4120-82ab-ed5a80e82434_1792x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KCXm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd80a1d-5de5-4120-82ab-ed5a80e82434_1792x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KCXm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd80a1d-5de5-4120-82ab-ed5a80e82434_1792x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KCXm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd80a1d-5de5-4120-82ab-ed5a80e82434_1792x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KCXm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd80a1d-5de5-4120-82ab-ed5a80e82434_1792x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KCXm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd80a1d-5de5-4120-82ab-ed5a80e82434_1792x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KCXm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd80a1d-5de5-4120-82ab-ed5a80e82434_1792x1024.jpeg" width="1456" height="832" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7bd80a1d-5de5-4120-82ab-ed5a80e82434_1792x1024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:832,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:680880,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!KCXm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd80a1d-5de5-4120-82ab-ed5a80e82434_1792x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KCXm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd80a1d-5de5-4120-82ab-ed5a80e82434_1792x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KCXm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd80a1d-5de5-4120-82ab-ed5a80e82434_1792x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KCXm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd80a1d-5de5-4120-82ab-ed5a80e82434_1792x1024.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The calendar invite-sending market is encompassed within the broader scheduling and calendar management software industry. Several key players dominate this space, offering diverse features to cater to various user needs. Notable competitors include:</p><ul><li><p><strong>Calendly</strong>: Renowned for its user-friendly interface, Calendly simplifies scheduling by allowing users to set their availability and share links for easy appointment booking.</p><p><a href="https://calendly.com/blog/meeting-scheduling-software?utm_source=chatgpt.com">calendly.com</a></p></li><li><p><strong>Doodle</strong>: Doodle specializes in group scheduling. It enables participants to vote on preferred meeting times, streamlining the process of finding mutually agreeable slots.</p><p><a href="https://calendly.com/blog/meeting-scheduling-software?utm_source=chatgpt.com">calendly.com</a></p></li><li><p><strong>Google Calendar</strong>: A widely-used free cloud calendar that integrates seamlessly with Google Assistant, offering a simple interface and task management features.</p><p><a href="https://www.lifewire.com/android-productivity-apps-8776675?utm_source=chatgpt.com">lifewire.com</a></p></li><li><p><strong>Microsoft Bookings</strong>: Part of the Microsoft 365 suite, this tool is designed for businesses to manage appointments and provides a centralized scheduling system.</p><p><a href="https://calendly.com/blog/meeting-scheduling-software?utm_source=chatgpt.com">calendly.com</a></p></li><li><p><strong>HubSpot Meeting Scheduler</strong>: Integrated within HubSpot's CRM, this scheduler facilitates seamless meeting bookings, which is particularly beneficial for sales and marketing teams.</p><p><a href="https://calendly.com/blog/meeting-scheduling-software?utm_source=chatgpt.com">calendly.com</a></p></li><li><p><strong>Clockwise</strong>: An intelligent calendar assistant optimizes team schedules by managing meeting times and creating uninterrupted focus periods.</p><p><a href="https://zapier.com/blog/best-meeting-scheduler-apps/?utm_source=chatgpt.com">zapier.com</a></p></li><li><p><strong>Chili Piper</strong>: Tailored for sales teams, Chili Piper offers advanced scheduling features, including routing and booking meetings directly from web forms.</p><p><a href="https://efficient.app/best/scheduler?utm_source=chatgpt.com">efficient.app</a></p></li><li><p><strong>YouCanBookMe</strong>: A straightforward scheduling tool that integrates calendars to provide customizable booking pages, ideal for individuals and small businesses.</p><p><a href="https://calendly.com/blog/meeting-scheduling-software?utm_source=chatgpt.com">calendly.com</a></p></li><li><p><strong>Cal.com</strong>: An open-source scheduling platform that offers extensive customization options, catering to users seeking tailored scheduling solutions.</p><p><a href="https://efficient.app/best/scheduler?utm_source=chatgpt.com">efficient.app</a></p></li><li><p><strong>Reclaim.ai</strong>: Focuses on integrating task management with calendar scheduling, helping users automatically block time for tasks and meetings.</p><p><a href="https://zapier.com/blog/best-meeting-scheduler-apps/?utm_source=chatgpt.com">zapier.com</a></p></li></ul><p>These platforms are at the forefront of the scheduling software market, each offering unique functionalities to meet the diverse needs of users and organizations.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.calendarinviteserver.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Calendar Invite Server for AWS! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>How are we different?</h2><p>We provide a Developers&#8217; Platform in an AWS Serverless Template to integrate Calendar Invites into AWS applications with a ready-made API Kit and access to the Lambdas to modify them.</p><p>This could be for one-to-one or one-to-many calendar invites sent using AWS SES.</p><div class="file-embed-wrapper" data-component-name="FileToDOM"><div class="file-embed-container-reader"><div class="file-embed-container-top"><image class="file-embed-thumbnail-default" src="https://substackcdn.com/image/fetch/$s_!0Cy0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Fimg%2Fattachment_icon.svg"></image><div class="file-embed-details"><div class="file-embed-details-h1">The Calendar Invite Server Market For Aws</div><div class="file-embed-details-h2">3.32MB &#8729; PDF file</div></div><a class="file-embed-button wide" href="https://calendarinviteserver.substack.com/api/v1/file/479c1093-45b3-4da1-b13e-0cffe97916a8.pdf"><span class="file-embed-button-text">Download</span></a></div><a class="file-embed-button narrow" href="https://calendarinviteserver.substack.com/api/v1/file/479c1093-45b3-4da1-b13e-0cffe97916a8.pdf"><span class="file-embed-button-text">Download</span></a></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wOvF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08772cad-0c08-47ba-9244-37c88149cdb4_718x820.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wOvF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08772cad-0c08-47ba-9244-37c88149cdb4_718x820.png 424w, https://substackcdn.com/image/fetch/$s_!wOvF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08772cad-0c08-47ba-9244-37c88149cdb4_718x820.png 848w, https://substackcdn.com/image/fetch/$s_!wOvF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08772cad-0c08-47ba-9244-37c88149cdb4_718x820.png 1272w, https://substackcdn.com/image/fetch/$s_!wOvF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08772cad-0c08-47ba-9244-37c88149cdb4_718x820.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wOvF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08772cad-0c08-47ba-9244-37c88149cdb4_718x820.png" width="718" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/08772cad-0c08-47ba-9244-37c88149cdb4_718x820.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:718,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:145848,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!wOvF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08772cad-0c08-47ba-9244-37c88149cdb4_718x820.png 424w, https://substackcdn.com/image/fetch/$s_!wOvF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08772cad-0c08-47ba-9244-37c88149cdb4_718x820.png 848w, https://substackcdn.com/image/fetch/$s_!wOvF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08772cad-0c08-47ba-9244-37c88149cdb4_718x820.png 1272w, https://substackcdn.com/image/fetch/$s_!wOvF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08772cad-0c08-47ba-9244-37c88149cdb4_718x820.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="file-embed-wrapper" data-component-name="FileToDOM"><div class="file-embed-container-reader"><div class="file-embed-container-top"><image class="file-embed-thumbnail-default" src="https://substackcdn.com/image/fetch/$s_!0Cy0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Fimg%2Fattachment_icon.svg"></image><div class="file-embed-details"><div class="file-embed-details-h1">The Calendar Invite Server Market For Aws</div><div class="file-embed-details-h2">3.32MB &#8729; PDF file</div></div><a class="file-embed-button wide" href="https://calendarinviteserver.substack.com/api/v1/file/e9b3d9e3-6935-44a7-82a1-fa19e938fea0.pdf"><span class="file-embed-button-text">Download</span></a></div><a class="file-embed-button narrow" href="https://calendarinviteserver.substack.com/api/v1/file/e9b3d9e3-6935-44a7-82a1-fa19e938fea0.pdf"><span class="file-embed-button-text">Download</span></a></div></div><p> </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.calendarinviteserver.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Calendar Invite Server for AWS! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Calendar Invite Server API's for AWS]]></title><description><![CDATA[The 9 APIs that run the from and back end of the Calendar Invite Server]]></description><link>https://www.calendarinviteserver.com/p/calendar-invite-server-apis-for-aws</link><guid isPermaLink="false">https://www.calendarinviteserver.com/p/calendar-invite-server-apis-for-aws</guid><dc:creator><![CDATA[Gregory Hanchin]]></dc:creator><pubDate>Thu, 06 Feb 2025 20:57:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AKoo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d3dfca0-8604-4717-b458-6b5b51ac4557_1041x507.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AKoo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d3dfca0-8604-4717-b458-6b5b51ac4557_1041x507.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AKoo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d3dfca0-8604-4717-b458-6b5b51ac4557_1041x507.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AKoo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d3dfca0-8604-4717-b458-6b5b51ac4557_1041x507.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AKoo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d3dfca0-8604-4717-b458-6b5b51ac4557_1041x507.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AKoo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d3dfca0-8604-4717-b458-6b5b51ac4557_1041x507.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AKoo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d3dfca0-8604-4717-b458-6b5b51ac4557_1041x507.jpeg" width="1041" height="507" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d3dfca0-8604-4717-b458-6b5b51ac4557_1041x507.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:507,&quot;width&quot;:1041,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AKoo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d3dfca0-8604-4717-b458-6b5b51ac4557_1041x507.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AKoo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d3dfca0-8604-4717-b458-6b5b51ac4557_1041x507.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AKoo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d3dfca0-8604-4717-b458-6b5b51ac4557_1041x507.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AKoo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d3dfca0-8604-4717-b458-6b5b51ac4557_1041x507.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>The Calendar Invite Server has 9 APIS.</strong></p><p><strong>Organizer &#8211; Single Event</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.calendarinviteserver.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Calendar Invite Server for AWS! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>1. Single Event Detail</strong></h2><p>The Event Details API retrieves the event's details.</p><p>Endpoint: /event/[uid]</p><h2><strong>2. Single Event Statistics and Reporting</strong></h2><p>The Event Statistics API retrieves the information totals for the number of calendar invitations sent and RSVPs received.</p><p>Endpoint: /event/[uid]/statistics</p><h2><strong>3 - Single Calendar Event</strong><br>Invitation Send</h2><p>Sends a Calendar Invitation to a single email address.</p><p>Endpoint: /event/[uid]/invite?email=[invitee email]&amp;name=[invitee name]&amp;origin=[text]&amp;landing=[url]</p><h2><strong>4- Single Event</strong><br>Invitee List</h2><p>A list of Invitees who have requested an invitation.</p><p>Endpoint: /event/[uid]/attendees</p><h2><strong>5- Single Event Invitee</strong><br>List (email response)</h2><p>When requested, an email is sent to the Event Organizer's email with a CSV of the Invitees for the Event.</p><p>Endpoint: /event/[uid]/report</p><p><strong>Organizer &#8211; All Events Data</strong></p><h2><strong>6- Organizer Events Detail</strong></h2><p>Provides an Array of Events created by a single Event Organizer.</p><p>Endpoint: /organizer/[organizer email]/events</p><h2><strong>7- Organizer Events Statistics and Reporting (totals)</strong></h2><p>Provides reporting for the number of invitations sent and RSVPs received for all Events created by a single Organizer.</p><p>Endpoint: /organizer/[organizer emal]/statistics</p><p><strong>Domain &#8211; All Organizers Data</strong></p><h2><strong>8- System <br>Events Detail</strong></h2><p>Provides an Array of all Events created within the Domain from Organizers</p><p>Endpoint: /system/events</p><p>9- System Events Statistics <br>and Reporting (totals)</p><p>Provides reporting for the number of invitations sent and RSVPs received for all Events created by all Organizers</p><p>Endpoint: /system/statistics</p><div class="file-embed-wrapper" data-component-name="FileToDOM"><div class="file-embed-container-reader"><div class="file-embed-container-top"><image class="file-embed-thumbnail-default" src="https://substackcdn.com/image/fetch/$s_!0Cy0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Fimg%2Fattachment_icon.svg"></image><div class="file-embed-details"><div class="file-embed-details-h1">The Calendar Invite Server For Aws Has 9 Apis</div><div class="file-embed-details-h2">330KB &#8729; PDF file</div></div><a class="file-embed-button wide" href="https://calendarinviteserver.substack.com/api/v1/file/371f2dae-3f4e-4ae1-aa93-7c0bda7fa241.pdf"><span class="file-embed-button-text">Download</span></a></div><a class="file-embed-button narrow" href="https://calendarinviteserver.substack.com/api/v1/file/371f2dae-3f4e-4ae1-aa93-7c0bda7fa241.pdf"><span class="file-embed-button-text">Download</span></a></div></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.calendarinviteserver.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Calendar Invite Server for AWS! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Calendar Invite Server Lambdas for AWS]]></title><description><![CDATA[A review of the python functions that run the calendar invite server]]></description><link>https://www.calendarinviteserver.com/p/calendar-invite-server-lambdas-for</link><guid isPermaLink="false">https://www.calendarinviteserver.com/p/calendar-invite-server-lambdas-for</guid><dc:creator><![CDATA[Gregory Hanchin]]></dc:creator><pubDate>Thu, 06 Feb 2025 20:50:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!RnOW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb210276c-e823-48ce-a261-5cf315d9de8f_1041x507.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RnOW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb210276c-e823-48ce-a261-5cf315d9de8f_1041x507.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RnOW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb210276c-e823-48ce-a261-5cf315d9de8f_1041x507.png 424w, https://substackcdn.com/image/fetch/$s_!RnOW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb210276c-e823-48ce-a261-5cf315d9de8f_1041x507.png 848w, https://substackcdn.com/image/fetch/$s_!RnOW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb210276c-e823-48ce-a261-5cf315d9de8f_1041x507.png 1272w, https://substackcdn.com/image/fetch/$s_!RnOW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb210276c-e823-48ce-a261-5cf315d9de8f_1041x507.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RnOW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb210276c-e823-48ce-a261-5cf315d9de8f_1041x507.png" width="1041" height="507" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b210276c-e823-48ce-a261-5cf315d9de8f_1041x507.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:507,&quot;width&quot;:1041,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RnOW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb210276c-e823-48ce-a261-5cf315d9de8f_1041x507.png 424w, https://substackcdn.com/image/fetch/$s_!RnOW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb210276c-e823-48ce-a261-5cf315d9de8f_1041x507.png 848w, https://substackcdn.com/image/fetch/$s_!RnOW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb210276c-e823-48ce-a261-5cf315d9de8f_1041x507.png 1272w, https://substackcdn.com/image/fetch/$s_!RnOW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb210276c-e823-48ce-a261-5cf315d9de8f_1041x507.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Lambda Narratives</strong></p><p><strong>Lambda 1:</strong> Disassemble the New Calendar Invite Data from the SES Inbox and store it in Dynamo with the UID in API # 1 for future retrieval. The developer status is protected, and the language is Python.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.calendarinviteserver.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Calendar Invite Server for AWS! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><strong>Lambda 2</strong> -Reassemble Calendar Invite data from Dynamo DB in a Multi-Part Message. Send a correctly formatted Calendar Invite using the AWS RAW API to UID and interfaces to API # 3. The developer status is protected, and the language is Python.</p><p><strong>Lambda 3&#8212;</strong>Collect, Parse, and Store RSVP Receipts for Calendar Invite UID and interfaces to API # 2 and API # 4. The developer status is protected, and the language is Python.</p><p><strong>Lambda 4</strong>&#8212;Reassemble Updated Calendar Invite data from Dynamo DB into a Multi-Part Message and Send it using the AWS RAW API and interfaces to API# 3. The developer status is protected, and the language is Python.</p><p><strong>Lambda 5</strong>&#8212;Disassemble the Calendar Invite Cancel Command and store it in Dynamo DB with the Calendar Invite UID. The developer status is protected, and the language is Python.</p><p><strong>Lambda 6</strong> -Send Calendar Invite Cancel message using AWS RAW API to UID. The developer status is protected, and the language is Python.</p><p><strong>Lambda 7</strong> - Send Email template #1 &#8211;Notification Email of Calendar Invite received, processed, and ready for access to the console. The developer status is Open, and the language is Python, EMAIL HTML for custom routing configuration by developers.</p><p><strong>Lambda 8</strong>&#8212;Send Email template #2&#8212;The notification Email of Calendar Invite Data failed to process with the next-step instructions. The developer status is Open, and the language is Python, EMAIL HTML for custom routing configuration by developers.</p><p><strong>Lambda 9</strong>&#8212;Send Email template #3 -Assemble email addresses and RSVP actions from Dynamo DB. Email the Organizer with CSV-attached email names and Y, N, and M details for that Event UID.</p><p><strong>Lambda 10</strong>&#8212;Gathers details from Dynamo DB, assembles the array of all the event data created by a single event organizer, and interfaces to API # 6. The developer status is protected, and the language is Python.</p><p><strong>Lambda 11</strong>- Gathers details from DynamoDB for the number of calendar invitations sent and RSVPs received for all Events created by Single Organizer and provides an array to API # 7. The developer status is protected, and the language is Python.</p><p><strong>Updated &#8211; Feb 2, 2025</strong></p><div class="file-embed-wrapper" data-component-name="FileToDOM"><div class="file-embed-container-reader"><div class="file-embed-container-top"><image class="file-embed-thumbnail-default" src="https://substackcdn.com/image/fetch/$s_!0Cy0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Fimg%2Fattachment_icon.svg"></image><div class="file-embed-details"><div class="file-embed-details-h1">Calendar Invite Server For Aws Lambdas</div><div class="file-embed-details-h2">86.5KB &#8729; PDF file</div></div><a class="file-embed-button wide" href="https://calendarinviteserver.substack.com/api/v1/file/fb56b601-c1d5-488f-8d44-6a85d559da56.pdf"><span class="file-embed-button-text">Download</span></a></div><a class="file-embed-button narrow" href="https://calendarinviteserver.substack.com/api/v1/file/fb56b601-c1d5-488f-8d44-6a85d559da56.pdf"><span class="file-embed-button-text">Download</span></a></div></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.calendarinviteserver.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Calendar Invite Server for AWS! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Socials]]></title><description><![CDATA[For the Calendar Invite Server for AWS]]></description><link>https://www.calendarinviteserver.com/p/socials</link><guid isPermaLink="false">https://www.calendarinviteserver.com/p/socials</guid><dc:creator><![CDATA[Gregory Hanchin]]></dc:creator><pubDate>Thu, 06 Feb 2025 20:31:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hwIH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e27aa01-9de9-486a-b816-51f395f0a0c5_1392x921.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hwIH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e27aa01-9de9-486a-b816-51f395f0a0c5_1392x921.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hwIH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e27aa01-9de9-486a-b816-51f395f0a0c5_1392x921.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hwIH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e27aa01-9de9-486a-b816-51f395f0a0c5_1392x921.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hwIH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e27aa01-9de9-486a-b816-51f395f0a0c5_1392x921.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hwIH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e27aa01-9de9-486a-b816-51f395f0a0c5_1392x921.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hwIH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e27aa01-9de9-486a-b816-51f395f0a0c5_1392x921.jpeg" width="1392" height="921" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0e27aa01-9de9-486a-b816-51f395f0a0c5_1392x921.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:921,&quot;width&quot;:1392,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hwIH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e27aa01-9de9-486a-b816-51f395f0a0c5_1392x921.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hwIH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e27aa01-9de9-486a-b816-51f395f0a0c5_1392x921.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hwIH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e27aa01-9de9-486a-b816-51f395f0a0c5_1392x921.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hwIH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e27aa01-9de9-486a-b816-51f395f0a0c5_1392x921.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We started a long time ago.</p><p>As a part-time project, our product has undergone six revisions in 10 years, and we have 4000 free customers on the AWS Serverless stack.</p><p>In 2025 and beyond, we are focused on the calendar invite server for AWS.</p><p>Calendarsnack and 31 events are being consolidated and will soon be referred to calendarinvite.com.</p><p><strong>YouTube</strong></p><p><a href="https://www.youtube.com/@calendarinvite/videos">https://www.youtube.com/@calendarinvite/videos</a></p><p><strong>Medium</strong></p><p><a href="https://medium.com/calendarsnack-com">https://medium.com/calendarsnack-com</a></p><p><strong>Substack - Email Death News Letter</strong></p><p><a href="https://www.emaildeath.com/?utm_source=substack&amp;utm_campaign=publication_embed&amp;utm_medium=web">EmailDeath</a></p><p><a href="https://www.emaildeath.com/?utm_source=substack&amp;utm_campaign=publication_embed&amp;utm_medium=web">Getting on the Calendar First</a></p><p><a href="https://www.emaildeath.com/?utm_source=substack&amp;utm_campaign=publication_embed&amp;utm_medium=web">By Greg Hanchin</a></p><p><strong>Twitter</strong></p><p><a href="https://x.com/31events">https://x.com/31events</a></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Building the Front End of the Calendar Invite Server]]></title><description><![CDATA[Using the Calendarsnack UI as a starting point]]></description><link>https://www.calendarinviteserver.com/p/building-the-front-end-of-the-calendar</link><guid isPermaLink="false">https://www.calendarinviteserver.com/p/building-the-front-end-of-the-calendar</guid><dc:creator><![CDATA[Gregory Hanchin]]></dc:creator><pubDate>Thu, 06 Feb 2025 20:16:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tUoT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11855d9-9dd5-48c1-b5a4-b844dc02f0ad_964x788.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tUoT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11855d9-9dd5-48c1-b5a4-b844dc02f0ad_964x788.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tUoT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11855d9-9dd5-48c1-b5a4-b844dc02f0ad_964x788.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tUoT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11855d9-9dd5-48c1-b5a4-b844dc02f0ad_964x788.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tUoT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11855d9-9dd5-48c1-b5a4-b844dc02f0ad_964x788.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tUoT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11855d9-9dd5-48c1-b5a4-b844dc02f0ad_964x788.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tUoT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11855d9-9dd5-48c1-b5a4-b844dc02f0ad_964x788.jpeg" width="964" height="788" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d11855d9-9dd5-48c1-b5a4-b844dc02f0ad_964x788.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:788,&quot;width&quot;:964,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tUoT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11855d9-9dd5-48c1-b5a4-b844dc02f0ad_964x788.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tUoT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11855d9-9dd5-48c1-b5a4-b844dc02f0ad_964x788.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tUoT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11855d9-9dd5-48c1-b5a4-b844dc02f0ad_964x788.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tUoT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd11855d9-9dd5-48c1-b5a4-b844dc02f0ad_964x788.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Building the Calendar Snack UI &#8211; State Management &amp; Routing</strong></p><p>Thanks for reading Calendar Invite Server (CIS) for AWS SES! Subscribe for free to receive new posts and support my work.</p><p><strong>Subscribed</strong></p><p>In the first article, we focused on the <strong>design philosophy</strong> behind Calendar Snack: simplicity, ease of use, and making calendar invites accessible to marketers.</p><p>Now, let&#8217;s take a <strong>deeper dive</strong> into how the Calendar Snack UI is structured using <strong>Vue Router</strong> for navigation and <strong>Pinia</strong> for state management.</p><p>A robust state and routing system is crucial for keeping the application fast, responsive, and user-friendly. We&#8217;ll walk through:</p><ol><li><p><strong>How Vue Router organizes navigation</strong> within the app.</p></li><li><p><strong>How Pinia stores manage application state</strong>, ensuring data availability without unnecessary API calls.</p></li></ol><p>3. <strong>How Calendar Snack tracks event invites and RSVPs</strong>, providing real-time insights for organizers.</p><p><strong>1. Structuring Navigation with Vue Router</strong></p><p>One of the first technical decisions in building Calendar Snack was designing an intuitive <strong>navigation flow</strong>. Because this is a single-page application (SPA), Vue Router is used to handle different pages dynamically.</p><p><strong>Primary Routes</strong></p><p>The routing structure consists of three primary sections:</p><ul><li><p><strong>Home</strong> (/) &#8211; The landing page.</p></li><li><p><strong>Dashboard</strong> (/dashboard) &#8211; The core app interface, protected by authentication.</p></li><li><p><strong>Docs</strong> (/docs) &#8211; Provides FAQs, user guides, and legal documentation.</p></li></ul><p>Additionally, there are dedicated routes for:</p><ul><li><p><strong>Login &amp; Registration</strong></p></li><li><p><strong>Single Event &amp; Multiple Event Views</strong></p></li><li><p><strong>Error Handling (404 Pages)</strong></p></li></ul><p><strong>Example Route Definition (Home &amp; Dashboard):</strong></p><pre><code><code>export const routes = [
  {
    path: "/",
    name: 'home',
    meta: { title: "Home", description: "Welcome Calendar Snack" },
    component: Home,
  },
  {
    path: "/dashboard",
    name: 'dashboard',
    meta: { title: "Dashboard", description: "Organizer Dashboard", authRequired: true },
    component: () =&gt; import("@/views/Dashboard.vue"),
    children: [
      {
        path: "dashhome",
        name: 'dashhome',
        meta: { title: "Summary", description: "Calendar Snack Dashboard" },
        component: () =&gt; import("@/pages/dashboard/DashHome.vue"),
      },
      {
        path: "sendinvites",
        name: 'sendinvites',
        meta: { title: "Send Calendar Invites", description: "Send Calendar Invites" },
        component: () =&gt; import("@/pages/dashboard/SendInvites.vue"),
      }
    ],
  }
];</code></code></pre><p><strong>Key Takeaways:</strong></p><ul><li><p>The <strong>Dashboard route</strong> has multiple child routes (dashhome, sendinvites, etc.).</p></li><li><p>Authentication (authRequired: true) is <strong>handled in application code</strong> rather than the router.</p></li><li><p>Dynamic parameters allow access to specific events (e.g., /event/:eventid).</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!plF3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b084cc3-192a-47aa-8602-965b166dde03_652x545.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!plF3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b084cc3-192a-47aa-8602-965b166dde03_652x545.png 424w, https://substackcdn.com/image/fetch/$s_!plF3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b084cc3-192a-47aa-8602-965b166dde03_652x545.png 848w, https://substackcdn.com/image/fetch/$s_!plF3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b084cc3-192a-47aa-8602-965b166dde03_652x545.png 1272w, https://substackcdn.com/image/fetch/$s_!plF3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b084cc3-192a-47aa-8602-965b166dde03_652x545.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!plF3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b084cc3-192a-47aa-8602-965b166dde03_652x545.png" width="652" height="545" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b084cc3-192a-47aa-8602-965b166dde03_652x545.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:545,&quot;width&quot;:652,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screenshot of a calendar snack\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:&quot;A screenshot of a calendar snack\n\nAI-generated content may be incorrect.&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screenshot of a calendar snack

AI-generated content may be incorrect." title="A screenshot of a calendar snack

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!plF3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b084cc3-192a-47aa-8602-965b166dde03_652x545.png 424w, https://substackcdn.com/image/fetch/$s_!plF3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b084cc3-192a-47aa-8602-965b166dde03_652x545.png 848w, https://substackcdn.com/image/fetch/$s_!plF3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b084cc3-192a-47aa-8602-965b166dde03_652x545.png 1272w, https://substackcdn.com/image/fetch/$s_!plF3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b084cc3-192a-47aa-8602-965b166dde03_652x545.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>2. Managing State with Pinia</strong></p><p>Vue&#8217;s <strong>Pinia store</strong> is used to <strong>persist data across components</strong>, reducing unnecessary API calls and improving responsiveness.</p><p><strong>Why Pinia?</strong></p><p>Pinia is lightweight, modular, and built for Vue 3. It allows <strong>centralized state management</strong> while keeping the reactivity and performance of Vue's Composition API.</p><p><strong>Key State Stores in Calendar Snack</strong></p><p>We use <strong>four</strong> Pinia stores to manage state:</p><ol><li><p><strong>Multiple Events Store (multiple.js)</strong> &#8211; Manages all events for an organizer.</p></li><li><p><strong>Multiple Stats Store (multipleStats.js)</strong> &#8211; Tracks invite stats across all events.</p></li><li><p><strong>Single Event Store (single.js)</strong> &#8211; Manages data for a single event.</p></li><li><p><strong>Single Stats Store (singleStats.js)</strong> &#8211; Stores RSVP and invite statistics for one event.</p></li></ol><p><strong>Multiple Events Store (multiple.js)</strong></p><p>Handles <strong>all events</strong> associated with an organizer.</p><pre><code><code>export const useMultipleStore = defineStore("multiple", {
  state: () =&gt; ({
    orgEmail: "",
    firstUid: "",
    orgEvents: [],
    error: null,
  }),

  getters: {
    getOrgEvents: (state) =&gt; state.orgEvents,
    futureEvents: (state) =&gt; state.orgEvents.filter(event =&gt; event.dtstart &gt; Date.now()),
  },

  actions: {
    async fetchOrgEvents(orgEmail) {
      try {
        const { data } = await apiClient.get(`${orgEmail}/events`);
        this.orgEvents = data;
        this.firstUid = data.length &gt; 0 ? data[0].uid : null;
      } catch (error) {
        this.error = "Failed to fetch events";
      }
    },
  },
});</code></code></pre><p><strong>Key Features:</strong></p><ul><li><p><strong>Fetches all events</strong> tied to an organizer&#8217;s email.</p></li><li><p><strong>Filters future &amp; past events</strong> dynamically.</p></li><li><p>Uses <strong>Axios for API calls</strong>, with error handling.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OgZg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86872f2e-1250-45b2-937c-024b2b9077dc_679x545.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OgZg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86872f2e-1250-45b2-937c-024b2b9077dc_679x545.png 424w, https://substackcdn.com/image/fetch/$s_!OgZg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86872f2e-1250-45b2-937c-024b2b9077dc_679x545.png 848w, https://substackcdn.com/image/fetch/$s_!OgZg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86872f2e-1250-45b2-937c-024b2b9077dc_679x545.png 1272w, https://substackcdn.com/image/fetch/$s_!OgZg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86872f2e-1250-45b2-937c-024b2b9077dc_679x545.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OgZg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86872f2e-1250-45b2-937c-024b2b9077dc_679x545.png" width="679" height="545" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/86872f2e-1250-45b2-937c-024b2b9077dc_679x545.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:545,&quot;width&quot;:679,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screenshot of a calendar snack\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:&quot;A screenshot of a calendar snack\n\nAI-generated content may be incorrect.&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screenshot of a calendar snack

AI-generated content may be incorrect." title="A screenshot of a calendar snack

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!OgZg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86872f2e-1250-45b2-937c-024b2b9077dc_679x545.png 424w, https://substackcdn.com/image/fetch/$s_!OgZg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86872f2e-1250-45b2-937c-024b2b9077dc_679x545.png 848w, https://substackcdn.com/image/fetch/$s_!OgZg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86872f2e-1250-45b2-937c-024b2b9077dc_679x545.png 1272w, https://substackcdn.com/image/fetch/$s_!OgZg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86872f2e-1250-45b2-937c-024b2b9077dc_679x545.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>3. Tracking Invites &amp; RSVPs</strong></p><p>Each event in Calendar Snack requires tracking <strong>how many invites were sent</strong> and <strong>how many RSVPs were received</strong>. This is handled by <strong>two additional stores</strong>.</p><p><strong>Multiple Stats Store (multipleStats.js)</strong></p><p>Tracks <strong>RSVP counts and invite analytics</strong> across <strong>all events</strong>.</p><pre><code><code>export const useMultipleStatsStore = defineStore("multipleStats", {
  state: () =&gt; ({
    orgEmail: "",
    orgInvites: 0,
    orgRsvp: { accepted: 0, declined: 0, tentative: 0, noaction: 0 },
  }),

  getters: {
    rsvpReceived: (state) =&gt;
      state.orgRsvp.accepted + state.orgRsvp.declined + state.orgRsvp.tentative,
    rsvpNone: (state) =&gt; state.orgRsvp.noaction,
  },

  actions: {
    async fetchOrgStats(orgEmail) {
      try {
        const { data } = await apiClient.get(`${orgEmail}/statistics`);
        this.orgInvites = data.attendees || 0;
        this.orgRsvp = data.rsvp || {};
      } catch (error) {
        console.error("Error fetching statistics:", error);
      }
    },
  },
});</code></code></pre><p><strong>Key Features:</strong></p><ul><li><p>Tracks <strong>total invitations sent</strong> (orgInvites).</p></li><li><p>Stores <strong>RSVP responses</strong> (accepted, declined, etc.).</p></li><li><p>Allows for <strong>real-time reporting</strong> on invite success rates.</p></li></ul><p><strong>4. Handling Single Event Data</strong></p><p>A similar setup is used for <strong>single event data</strong> (single.js) and <strong>single event statistics</strong>(singleStats.js).</p><p><strong>Single Event Store (single.js):</strong></p><ul><li><p>Loads details for a specific event using a uid.</p></li><li><p>Provides <strong>faster access</strong> to event details without refetching data.</p></li></ul><p><strong>Single Event Stats Store (singleStats.js):</strong></p><ul><li><p>Tracks <strong>RSVP responses for one event</strong>.</p></li><li><p>Provides summary stats on <strong>who accepted, declined, or didn&#8217;t respond</strong>.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QZnE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f34d2d9-eaf0-4838-b014-07a83bf647e6_677x545.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QZnE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f34d2d9-eaf0-4838-b014-07a83bf647e6_677x545.png 424w, https://substackcdn.com/image/fetch/$s_!QZnE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f34d2d9-eaf0-4838-b014-07a83bf647e6_677x545.png 848w, https://substackcdn.com/image/fetch/$s_!QZnE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f34d2d9-eaf0-4838-b014-07a83bf647e6_677x545.png 1272w, https://substackcdn.com/image/fetch/$s_!QZnE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f34d2d9-eaf0-4838-b014-07a83bf647e6_677x545.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QZnE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f34d2d9-eaf0-4838-b014-07a83bf647e6_677x545.png" width="677" height="545" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f34d2d9-eaf0-4838-b014-07a83bf647e6_677x545.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:545,&quot;width&quot;:677,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screenshot of a calendar snack\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:&quot;A screenshot of a calendar snack\n\nAI-generated content may be incorrect.&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screenshot of a calendar snack

AI-generated content may be incorrect." title="A screenshot of a calendar snack

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!QZnE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f34d2d9-eaf0-4838-b014-07a83bf647e6_677x545.png 424w, https://substackcdn.com/image/fetch/$s_!QZnE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f34d2d9-eaf0-4838-b014-07a83bf647e6_677x545.png 848w, https://substackcdn.com/image/fetch/$s_!QZnE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f34d2d9-eaf0-4838-b014-07a83bf647e6_677x545.png 1272w, https://substackcdn.com/image/fetch/$s_!QZnE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f34d2d9-eaf0-4838-b014-07a83bf647e6_677x545.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Final Thoughts</strong></p><p>The combination of <strong>Vue Router and Pinia Stores</strong> ensures that <strong>Calendar Snack is fast, scalable, and user-friendly</strong>.</p><ul><li><p><strong>Vue Router</strong> provides <strong>clean navigation</strong>, keeping routes simple and logical.</p></li><li><p><strong>Pinia Stores</strong> ensure <strong>state persistence</strong>, reducing unnecessary API calls.</p></li><li><p><strong>Separation of multiple &amp; single event data</strong> makes the app modular and efficient.</p></li></ul><p>In the next article, we&#8217;ll explore <strong>the frontend UI components</strong> that bring all this data to life. We will start to see how we leverage the Event Array data, and start applying various sorting and filtering functions.</p><p>In addition to the Events Array, we will step through the various pre-built pages for Sending Calendar Invites, including landing pages for both All Events and a Single Event. This discussion will also include how we leverage Personalization Merge Codes to create our RSVP button.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ljKz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7fdd80-dede-4773-9e07-c3d6028eefd0_1609x899.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ljKz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7fdd80-dede-4773-9e07-c3d6028eefd0_1609x899.png 424w, https://substackcdn.com/image/fetch/$s_!ljKz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7fdd80-dede-4773-9e07-c3d6028eefd0_1609x899.png 848w, https://substackcdn.com/image/fetch/$s_!ljKz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7fdd80-dede-4773-9e07-c3d6028eefd0_1609x899.png 1272w, https://substackcdn.com/image/fetch/$s_!ljKz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7fdd80-dede-4773-9e07-c3d6028eefd0_1609x899.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ljKz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7fdd80-dede-4773-9e07-c3d6028eefd0_1609x899.png" width="1456" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef7fdd80-dede-4773-9e07-c3d6028eefd0_1609x899.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:584202,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ljKz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7fdd80-dede-4773-9e07-c3d6028eefd0_1609x899.png 424w, https://substackcdn.com/image/fetch/$s_!ljKz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7fdd80-dede-4773-9e07-c3d6028eefd0_1609x899.png 848w, https://substackcdn.com/image/fetch/$s_!ljKz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7fdd80-dede-4773-9e07-c3d6028eefd0_1609x899.png 1272w, https://substackcdn.com/image/fetch/$s_!ljKz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7fdd80-dede-4773-9e07-c3d6028eefd0_1609x899.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="file-embed-wrapper" data-component-name="FileToDOM"><div class="file-embed-container-reader"><div class="file-embed-container-top"><image class="file-embed-thumbnail-default" src="https://substackcdn.com/image/fetch/$s_!0Cy0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Fimg%2Fattachment_icon.svg"></image><div class="file-embed-details"><div class="file-embed-details-h1">Building The Calendar Invite Server For Aws</div><div class="file-embed-details-h2">2.57MB &#8729; PDF file</div></div><a class="file-embed-button wide" href="https://calendarinviteserver.substack.com/api/v1/file/76ee8dd6-8cce-4873-8024-755b05517cbe.pdf"><span class="file-embed-button-text">Download</span></a></div><a class="file-embed-button narrow" href="https://calendarinviteserver.substack.com/api/v1/file/76ee8dd6-8cce-4873-8024-755b05517cbe.pdf"><span class="file-embed-button-text">Download</span></a></div></div><p> </p>]]></content:encoded></item></channel></rss>