Skip to content

Better then notes ❤️. Synced between your devices, simple, fast, shareable and purple.

License

Notifications You must be signed in to change notification settings

logotip4ik/keycap

Repository files navigation

SWUbanner

Keycap

Purple keycap with capital letter K

Simple note-taking app with support for markdown. Share your thoughts with others and organize them into folders.

Why?

After months of using Windows and Android, I found out that notes aren't syncing and there isn't any support for markdown. But you may ask, Why build another Notion? and the answer will be pretty simple. With this project, I developed my skills and learned something new. Also, Keycap will load much faster than Notion, and it won't update itself in the most unsuitable time 🙃.

Stack

Todo

  • custom ctrl+k search
  • commands through ctrl+k
  • add support for renaming folders
  • OAuth with Google and GitHub?
  • show notes via sharable links
  • code highlighting
  • work without internet (kinda working, if the page is still cached, notes and folders will be loaded from local copies)
  • create landing page
  • create project logo

Notes

  • With migrating to kysely, the overall memory usage dropped significantly (something like -100mb)

  • Tested node vs bun vs deno perf, and results are quite interesting (testing command bombardier -c 200 -d 60s -la, Fedora):

    1. So the most performant is node, +-80000 rps, but it has little memory leak...
    2. Bun takes second place with +-79000 rps, although it's memory is rock solid
    3. Last one is deno, +-75000 rps (it is still very good result), but it also has a memory leak, so V8 is doing some weird stuff here ¯\(ツ)

Load testing with Bombardier

Firstly build the project in bench config: yarn build:bench, then test command itself (tested on Windows):

bombardier http://localhost:3000/api/notes/main -l -d 60s -c 300

Note

Don't forget to download the bombardier

Kysely
Statistics        Avg      Stdev        Max
  Reqs/sec       601.55      90.08     841.85
  Latency      497.61ms    32.88ms      0.89s
  Latency Distribution
     50%   503.24ms
     75%   515.54ms
     90%   526.89ms
     95%   535.99ms
     99%   625.21ms
  HTTP codes:
    1xx - 0, 2xx - 36322, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    34.97MB/s
Prisma (v4)
Statistics        Avg      Stdev        Max
  Reqs/sec       587.57     161.55    4091.91
  Latency      512.14ms    46.99ms      0.99s
  Latency Distribution
     50%   504.01ms
     75%   524.79ms
     90%   586.09ms
     95%   615.20ms
     99%   682.54ms
  HTTP codes:
    1xx - 0, 2xx - 35320, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    33.94MB/s
Drizzle

I should have done something wrong feat/drizzle

Statistics        Avg      Stdev        Max
  Reqs/sec       173.54      34.56     269.03
  Latency         1.70s   456.12ms      6.18s
  Latency Distribution
     50%      1.57s
     75%      1.68s
     90%      1.88s
     95%      1.99s
     99%      3.86s
  HTTP codes:
    1xx - 0, 2xx - 10716, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    10.18MB/s