Best Practices Showcase (8 hours of videos & a doc)

I created a doc to showcase best practices for making Coda docs that are enjoyable to build and use.

As I was building it from scratch, I filmed it and narrated extensively.

At the moment this is the single concentrated source of knowledge on how to approach building great Coda docs, how to be mindful of good user experience and clean maintainable architecture. I tried to pack as much Coda experience that I’ve got over the last few years as I could into these. Hence the length: I’m explaining many approaches in great detail. Whether you’re a beginner or a seasoned maker (or a Codan too) going through these will definitely be useful for you.

The videos don’t talk about cross-doc setups or optimizing heavy docs. Those are huge topics on their own deserving their own dedicated playlists

The doc:

The playlist:

The Patreon
where more educational content like this is posted (some for Patrons exclusively). Please check it out:

Some videos have janky audio in the second half :frowning: I don’t know what happened; I only knew this happened after I stopped recording and I could not recover the original audio anymore. If anyone knows how to fix these posthaste please let me know and I’ll try to reupload these.


Fantastic work @Paul_Danyliuk! Every time I watch one of your videos I learn something new and useful (In many cases quite a few new things every time :slight_smile:) .
Only problem is to find enough time to watch them as I have a lot of work at the moment :confused: I am struggling to keep up :smiley:


I have watched them already.
Really great resource for those who want to improve any doc.
Thank you a lot, @Paul_Danyliuk
I hope get more patrons so we can keep up with the good work.
You deserve it.


@Paul_Danyliuk this thread is an excellent example of addressing this :point_down: [general] Coda user sentiment (from November 2019)


@Marko_Petrovic I still have not discovered a way to have more than 24 hours per day, but when it comes to online videos, I watch most YouTube videos on 3x or 3.5x speed :crazy_face:

document.getElementsByTagName("video")[0].playbackRate = 3.5
:point_up_2: Change the 3.5 at the end to 3.0 to slow it down. The maximum is 3.99 before YouTube begins to skip frames

  1. ctrl/⌘ + i in Google Chrome → opens developer console
  2. click console tab in top right
  3. [optional] click :no_entry_sign: in top right → clears alerts
  4. ctrl/⌘ + v → document.getElementsByTagName("video")[0].playbackRate = 3.5
  5. press enter
  6. close Google Chrome developer console :x: in top right
  7. press play on YouTube video :play_or_pause_button:
  8. fast

*for Vimeo videos: if ctrl/⌘ + i does not work … right click on the video embedded in the page and click “inspect”

Text Expansion Keyboard shortcut → PC & Mac ($40 USD/year)
or → for PC (free) 1) download 2) install 3) paste code :point_down: into .txt file

AutoHotKey - for YouTube Speed (ctrl + alt + k)
SendInput document.getElementsByTagName("video")[0].playbackRate = 3.5

Extras - Kill switch (windows + esc) and no tray icon (automatic)

4) double click .txt file to activate 5) use keyboard shortcut to paste (ctrl + alt + k) 6) right click .ahk / .txt file open with notepad to edit 7) to activate on computer startup, place .ahk / .txt file in folder located around Microsoft\Windows\Start Menu\Programs\Startup

less advanced … similar outcome


That some serious guide there :smiley: I must admit I never really given any thought to the idea of watching videos at higher speed. I will have to test that :slight_smile:

1 Like

3.5 is pretty insane. Especially if the speaker is not a native but a slav like me lol :grin:


Awesome content @Paul_Danyliuk!

I encountered an issue with pasting “tab” into the table the way you showed it.
It may be useful to anyone trying this. The solution I used was to:

  1. Create a formula value on canvas with a
    tab and name it “Tab”:
    CleanShot 2021-06-28 at 15.57.00

  2. Input the placeholder (I used {2}) to the label:
    CleanShot 2021-06-28 at 15.55.10

  3. Input “Tab” into the Format() where needed:
    CleanShot 2021-06-28 at 15.55.42

The result:
CleanShot 2021-06-28 at 16.00.22


@Tomislav_Mamic I like the creativity, but couldn’t you have used char(9) in lieu of Tab T in Format() like this:

SwitchIf(thisrow = Flow: no user, ... imageIcon:"user"),char(9)

Didn’t think of that. That’s even better!