<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Egor</title>
    <description>The latest articles on DEV Community by Egor (@xslnx).</description>
    <link>https://dev.to/xslnx</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4207262%2F7a0c5883-3fde-474f-a106-8bc3bb25350d.png</url>
      <title>DEV Community: Egor</title>
      <link>https://dev.to/xslnx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/xslnx"/>
    <language>en</language>
    <item>
      <title>How I used Slack's Canvas API to stop losing my meeting notes</title>
      <dc:creator>Egor</dc:creator>
      <pubDate>Sun, 25 Oct 2026 19:43:08 +0000</pubDate>
      <link>https://dev.to/xslnx/how-i-used-slacks-canvas-api-to-stop-losing-my-meeting-notes-44nh</link>
      <guid>https://dev.to/xslnx/how-i-used-slacks-canvas-api-to-stop-losing-my-meeting-notes-44nh</guid>
      <description>&lt;p&gt;My notes for upcoming meetings used to live in three different places: Slack reminders, DMs to myself, and a txt file on my laptop. I never found the right one before a meeting started.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://notes.tappuccino.dev/" rel="noopener noreferrer"&gt;Meeting Notes&lt;/a&gt;, a Slack bot that gives each meeting (or recurring series) its own private canvas, synced with Google Calendar.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A Home tab lists your meetings for the next 7 days&lt;/li&gt;
&lt;li&gt;Each meeting gets a private Slack canvas only you can see&lt;/li&gt;
&lt;li&gt;A recurring meeting keeps &lt;em&gt;one&lt;/em&gt; canvas: a new section per date, newest on top, so the whole history with that person or team is in one place&lt;/li&gt;
&lt;li&gt;Templates (built-in or your own) pre-fill every new section automatically&lt;/li&gt;
&lt;li&gt;An optional DM reminds you a few minutes before a meeting, linking straight to its notes&lt;/li&gt;
&lt;li&gt;Read-only Google Calendar sync keeps dates up to date on their own&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A couple of things I learned building it
&lt;/h2&gt;

&lt;p&gt;Slack Canvas's API has an &lt;code&gt;insert_at_start&lt;/code&gt; edit operation, which is exactly what you want for "newest on top": each new date section gets inserted above the existing ones in one call, no need to read the whole document and rewrite it.&lt;/p&gt;

&lt;p&gt;Canvases are created with the &lt;em&gt;user's own&lt;/em&gt; OAuth token, not the bot's — that's what makes them private to just that person, since the bot token alone can't see them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;TypeScript, Slack's Bolt framework, SQLite (&lt;code&gt;node:sqlite&lt;/code&gt;), Google Calendar API, hosted on Railway.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caveat
&lt;/h2&gt;

&lt;p&gt;It's built on Slack canvases, which only exist on paid Slack plans — free workspaces can't use it.&lt;/p&gt;

&lt;p&gt;This is launch week for me, no users outside my own testing yet. Would love feedback, especially anything confusing in the install flow or the Home tab: &lt;a href="https://notes.tappuccino.dev/" rel="noopener noreferrer"&gt;https://notes.tappuccino.dev/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>productivity</category>
      <category>sideprojects</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
