| 1 |
<!DOCTYPE html> |
| 2 |
<html lang="en"> |
| 3 |
<head> |
| 4 |
<meta charset="UTF-8"> |
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| 6 |
<title>GoingsOn — Pitch</title> |
| 7 |
<style> |
| 8 |
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;600&family=Young+Serif&display=swap'); |
| 9 |
|
| 10 |
:root { |
| 11 |
--bg: #E8F4F8; |
| 12 |
--bg-card: #FFFFFF; |
| 13 |
--bg-warm: #D4EBF2; |
| 14 |
--bg-deep: #C0E2EC; |
| 15 |
--text: #1B365D; |
| 16 |
--text-secondary: #3D5A80; |
| 17 |
--text-muted: #6B8CAE; |
| 18 |
--accent: #F7D154; |
| 19 |
--accent-dark: #d4a81e; |
| 20 |
--green: #5CB85C; |
| 21 |
--red: #DC3545; |
| 22 |
--purple: #7B68EE; |
| 23 |
--cyan: #17A2B8; |
| 24 |
--border: #1B365D; |
| 25 |
--border-light: #a8c4d4; |
| 26 |
} |
| 27 |
|
| 28 |
* { margin: 0; padding: 0; box-sizing: border-box; } |
| 29 |
|
| 30 |
@page { size: letter; margin: 0; } |
| 31 |
|
| 32 |
body { |
| 33 |
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; |
| 34 |
color: var(--text); |
| 35 |
background: var(--bg); |
| 36 |
line-height: 1.6; |
| 37 |
-webkit-print-color-adjust: exact; |
| 38 |
print-color-adjust: exact; |
| 39 |
} |
| 40 |
|
| 41 |
.page { |
| 42 |
width: 8.5in; |
| 43 |
min-height: 11in; |
| 44 |
margin: 0 auto; |
| 45 |
padding: 0.55in 0.75in; |
| 46 |
background: var(--bg); |
| 47 |
page-break-after: always; |
| 48 |
position: relative; |
| 49 |
} |
| 50 |
|
| 51 |
.page:last-child { page-break-after: auto; } |
| 52 |
|
| 53 |
|
| 54 |
|
| 55 |
.hero { |
| 56 |
text-align: center; |
| 57 |
padding: 0.3in 0 0.25in; |
| 58 |
border-bottom: 3px solid var(--border); |
| 59 |
margin-bottom: 0.25in; |
| 60 |
} |
| 61 |
|
| 62 |
.hero h1 { |
| 63 |
font-family: 'Young Serif', Georgia, serif; |
| 64 |
font-size: 48px; |
| 65 |
font-weight: 400; |
| 66 |
color: var(--text); |
| 67 |
margin-bottom: 4px; |
| 68 |
letter-spacing: -0.5px; |
| 69 |
} |
| 70 |
|
| 71 |
.hero h1 .dot { color: var(--accent-dark); } |
| 72 |
|
| 73 |
.hero .tagline { |
| 74 |
font-family: 'IBM Plex Mono', monospace; |
| 75 |
font-size: 14px; |
| 76 |
color: var(--text-secondary); |
| 77 |
letter-spacing: 0.3px; |
| 78 |
} |
| 79 |
|
| 80 |
.hero .sub { |
| 81 |
font-size: 12.5px; |
| 82 |
color: var(--text-muted); |
| 83 |
margin-top: 8px; |
| 84 |
} |
| 85 |
|
| 86 |
|
| 87 |
|
| 88 |
h2 { |
| 89 |
font-family: 'IBM Plex Mono', monospace; |
| 90 |
font-size: 14px; |
| 91 |
font-weight: 600; |
| 92 |
text-transform: uppercase; |
| 93 |
letter-spacing: 1.5px; |
| 94 |
color: var(--text); |
| 95 |
margin-bottom: 12px; |
| 96 |
padding-bottom: 5px; |
| 97 |
border-bottom: 2px solid var(--border); |
| 98 |
} |
| 99 |
|
| 100 |
h3 { |
| 101 |
font-family: 'IBM Plex Mono', monospace; |
| 102 |
font-size: 12.5px; |
| 103 |
font-weight: 600; |
| 104 |
color: var(--text); |
| 105 |
margin-bottom: 5px; |
| 106 |
margin-top: 14px; |
| 107 |
} |
| 108 |
|
| 109 |
h3:first-child { margin-top: 0; } |
| 110 |
|
| 111 |
.intro { |
| 112 |
font-size: 14.5px; |
| 113 |
line-height: 1.7; |
| 114 |
margin-bottom: 0.22in; |
| 115 |
} |
| 116 |
|
| 117 |
|
| 118 |
|
| 119 |
.stats { |
| 120 |
display: grid; |
| 121 |
grid-template-columns: repeat(5, 1fr); |
| 122 |
gap: 10px; |
| 123 |
margin-bottom: 0.25in; |
| 124 |
} |
| 125 |
|
| 126 |
.stat { |
| 127 |
text-align: center; |
| 128 |
background: var(--bg-card); |
| 129 |
border: 3px solid var(--border); |
| 130 |
border-radius: 6px; |
| 131 |
padding: 10px 6px; |
| 132 |
box-shadow: 3px 3px 0 var(--border); |
| 133 |
} |
| 134 |
|
| 135 |
.stat .num { |
| 136 |
font-family: 'Young Serif', Georgia, serif; |
| 137 |
font-size: 26px; |
| 138 |
color: var(--text); |
| 139 |
display: block; |
| 140 |
line-height: 1; |
| 141 |
margin-bottom: 3px; |
| 142 |
} |
| 143 |
|
| 144 |
.stat .label { |
| 145 |
font-family: 'IBM Plex Mono', monospace; |
| 146 |
font-size: 9px; |
| 147 |
color: var(--text-muted); |
| 148 |
text-transform: uppercase; |
| 149 |
letter-spacing: 0.4px; |
| 150 |
} |
| 151 |
|
| 152 |
|
| 153 |
|
| 154 |
.features { |
| 155 |
display: grid; |
| 156 |
grid-template-columns: 1fr 1fr; |
| 157 |
gap: 12px; |
| 158 |
margin-bottom: 0.22in; |
| 159 |
} |
| 160 |
|
| 161 |
.feature-card { |
| 162 |
background: var(--bg-card); |
| 163 |
border: 3px solid var(--border); |
| 164 |
border-radius: 6px; |
| 165 |
padding: 12px 14px; |
| 166 |
box-shadow: 3px 3px 0 var(--border); |
| 167 |
} |
| 168 |
|
| 169 |
.feature-card h3 { |
| 170 |
margin: 0 0 5px 0; |
| 171 |
font-size: 12px; |
| 172 |
color: var(--text); |
| 173 |
border-bottom: 2px solid var(--accent); |
| 174 |
padding-bottom: 3px; |
| 175 |
display: inline-block; |
| 176 |
} |
| 177 |
|
| 178 |
.feature-card ul { list-style: none; padding: 0; } |
| 179 |
|
| 180 |
.feature-card li { |
| 181 |
font-size: 11.5px; |
| 182 |
line-height: 1.4; |
| 183 |
color: var(--text-secondary); |
| 184 |
padding: 1.5px 0 1.5px 13px; |
| 185 |
position: relative; |
| 186 |
} |
| 187 |
|
| 188 |
.feature-card li::before { |
| 189 |
content: ''; |
| 190 |
position: absolute; |
| 191 |
left: 0; |
| 192 |
top: 7px; |
| 193 |
width: 6px; |
| 194 |
height: 6px; |
| 195 |
background: var(--accent); |
| 196 |
border: 1px solid var(--border); |
| 197 |
} |
| 198 |
|
| 199 |
|
| 200 |
|
| 201 |
.feature-section { margin-bottom: 0.2in; } |
| 202 |
|
| 203 |
.feature-section ul { |
| 204 |
list-style: none; |
| 205 |
padding: 0; |
| 206 |
columns: 2; |
| 207 |
column-gap: 22px; |
| 208 |
} |
| 209 |
|
| 210 |
.feature-section li { |
| 211 |
font-size: 11.5px; |
| 212 |
line-height: 1.4; |
| 213 |
color: var(--text-secondary); |
| 214 |
padding: 2px 0 2px 13px; |
| 215 |
position: relative; |
| 216 |
break-inside: avoid; |
| 217 |
} |
| 218 |
|
| 219 |
.feature-section li::before { |
| 220 |
content: ''; |
| 221 |
position: absolute; |
| 222 |
left: 0; |
| 223 |
top: 7.5px; |
| 224 |
width: 6px; |
| 225 |
height: 6px; |
| 226 |
background: var(--accent); |
| 227 |
border: 1px solid var(--border); |
| 228 |
} |
| 229 |
|
| 230 |
|
| 231 |
|
| 232 |
.highlight-box { |
| 233 |
background: var(--bg-card); |
| 234 |
border: 3px solid var(--border); |
| 235 |
border-left: 6px solid var(--accent); |
| 236 |
padding: 11px 15px; |
| 237 |
margin-bottom: 0.2in; |
| 238 |
box-shadow: 3px 3px 0 var(--border); |
| 239 |
} |
| 240 |
|
| 241 |
.highlight-box p { |
| 242 |
font-size: 12px; |
| 243 |
line-height: 1.55; |
| 244 |
color: var(--text-secondary); |
| 245 |
} |
| 246 |
|
| 247 |
.highlight-box strong { color: var(--text); } |
| 248 |
|
| 249 |
|
| 250 |
|
| 251 |
.comparison { |
| 252 |
width: 100%; |
| 253 |
border-collapse: collapse; |
| 254 |
margin-bottom: 0.2in; |
| 255 |
font-size: 11px; |
| 256 |
} |
| 257 |
|
| 258 |
.comparison th { |
| 259 |
font-family: 'IBM Plex Mono', monospace; |
| 260 |
font-size: 10px; |
| 261 |
font-weight: 600; |
| 262 |
text-align: left; |
| 263 |
text-transform: uppercase; |
| 264 |
letter-spacing: 0.5px; |
| 265 |
padding: 7px 7px; |
| 266 |
background: var(--bg-deep); |
| 267 |
color: var(--text); |
| 268 |
border: 2px solid var(--border); |
| 269 |
} |
| 270 |
|
| 271 |
.comparison td { |
| 272 |
padding: 5px 7px; |
| 273 |
border: 2px solid var(--border); |
| 274 |
color: var(--text-secondary); |
| 275 |
vertical-align: top; |
| 276 |
} |
| 277 |
|
| 278 |
.comparison .check { color: var(--green); font-weight: 700; font-size: 12px; } |
| 279 |
.comparison .dash { color: var(--text-muted); } |
| 280 |
|
| 281 |
|
| 282 |
|
| 283 |
.shortcuts { |
| 284 |
display: grid; |
| 285 |
grid-template-columns: repeat(3, 1fr); |
| 286 |
gap: 4px 14px; |
| 287 |
margin-bottom: 0.15in; |
| 288 |
} |
| 289 |
|
| 290 |
.shortcut { |
| 291 |
display: flex; |
| 292 |
align-items: center; |
| 293 |
gap: 6px; |
| 294 |
font-size: 11px; |
| 295 |
color: var(--text-secondary); |
| 296 |
padding: 1.5px 0; |
| 297 |
} |
| 298 |
|
| 299 |
.shortcut kbd { |
| 300 |
font-family: 'IBM Plex Mono', monospace; |
| 301 |
font-size: 10px; |
| 302 |
background: var(--bg-card); |
| 303 |
border: 2px solid var(--border); |
| 304 |
border-radius: 3px; |
| 305 |
padding: 1px 5px; |
| 306 |
color: var(--text); |
| 307 |
min-width: 22px; |
| 308 |
text-align: center; |
| 309 |
box-shadow: 2px 2px 0 var(--border); |
| 310 |
} |
| 311 |
|
| 312 |
|
| 313 |
|
| 314 |
.two-col { |
| 315 |
display: grid; |
| 316 |
grid-template-columns: 1fr 1fr; |
| 317 |
gap: 12px; |
| 318 |
margin-bottom: 0.2in; |
| 319 |
} |
| 320 |
|
| 321 |
.two-col .col { |
| 322 |
background: var(--bg-card); |
| 323 |
border: 3px solid var(--border); |
| 324 |
border-radius: 6px; |
| 325 |
padding: 12px 14px; |
| 326 |
box-shadow: 3px 3px 0 var(--border); |
| 327 |
} |
| 328 |
|
| 329 |
.two-col .col h3 { |
| 330 |
margin: 0 0 5px 0; |
| 331 |
font-size: 12px; |
| 332 |
color: var(--text); |
| 333 |
border-bottom: 2px solid var(--accent); |
| 334 |
padding-bottom: 3px; |
| 335 |
display: inline-block; |
| 336 |
} |
| 337 |
|
| 338 |
.two-col .col p { |
| 339 |
font-size: 11.5px; |
| 340 |
line-height: 1.5; |
| 341 |
color: var(--text-secondary); |
| 342 |
} |
| 343 |
|
| 344 |
|
| 345 |
|
| 346 |
.domains { |
| 347 |
display: grid; |
| 348 |
grid-template-columns: repeat(5, 1fr); |
| 349 |
gap: 10px; |
| 350 |
margin-bottom: 0.22in; |
| 351 |
} |
| 352 |
|
| 353 |
.domain { |
| 354 |
background: var(--bg-card); |
| 355 |
border: 3px solid var(--border); |
| 356 |
border-radius: 6px; |
| 357 |
padding: 10px 8px; |
| 358 |
text-align: center; |
| 359 |
box-shadow: 3px 3px 0 var(--border); |
| 360 |
} |
| 361 |
|
| 362 |
.domain .icon { |
| 363 |
font-size: 20px; |
| 364 |
display: block; |
| 365 |
margin-bottom: 4px; |
| 366 |
filter: grayscale(100%); |
| 367 |
} |
| 368 |
|
| 369 |
.domain .name { |
| 370 |
font-family: 'IBM Plex Mono', monospace; |
| 371 |
font-size: 10.5px; |
| 372 |
font-weight: 600; |
| 373 |
color: var(--text); |
| 374 |
display: block; |
| 375 |
margin-bottom: 2px; |
| 376 |
} |
| 377 |
|
| 378 |
.domain .desc { |
| 379 |
font-size: 9.5px; |
| 380 |
color: var(--text-muted); |
| 381 |
line-height: 1.3; |
| 382 |
} |
| 383 |
|
| 384 |
|
| 385 |
|
| 386 |
.footer { |
| 387 |
position: absolute; |
| 388 |
bottom: 0.4in; |
| 389 |
left: 0.75in; |
| 390 |
right: 0.75in; |
| 391 |
display: flex; |
| 392 |
justify-content: space-between; |
| 393 |
align-items: center; |
| 394 |
padding-top: 8px; |
| 395 |
border-top: 2px solid var(--border); |
| 396 |
} |
| 397 |
|
| 398 |
.footer .left, .footer .right { |
| 399 |
font-family: 'IBM Plex Mono', monospace; |
| 400 |
font-size: 10px; |
| 401 |
color: var(--text-muted); |
| 402 |
} |
| 403 |
|
| 404 |
.footer-inline { |
| 405 |
display: flex; |
| 406 |
justify-content: space-between; |
| 407 |
align-items: center; |
| 408 |
padding-top: 8px; |
| 409 |
border-top: 2px solid var(--border); |
| 410 |
margin-top: auto; |
| 411 |
} |
| 412 |
|
| 413 |
.footer-inline .left, .footer-inline .right { |
| 414 |
font-family: 'IBM Plex Mono', monospace; |
| 415 |
font-size: 10px; |
| 416 |
color: var(--text-muted); |
| 417 |
} |
| 418 |
|
| 419 |
@media print { body { background: white; } .page { box-shadow: none; } } |
| 420 |
@media screen { body { background: #bbb; padding: 20px 0; } .page { box-shadow: 0 2px 20px rgba(0,0,0,0.15); margin-bottom: 20px; } } |
| 421 |
</style> |
| 422 |
</head> |
| 423 |
<body> |
| 424 |
|
| 425 |
|
| 426 |
|
| 427 |
|
| 428 |
<div class="page"> |
| 429 |
|
| 430 |
<div class="hero"> |
| 431 |
<h1>GoingsOn<span class="dot">.</span></h1> |
| 432 |
<div class="tagline">Tasks, email, calendar, contacts. One app. Your machine.</div> |
| 433 |
<div class="sub">A local-first productivity workspace for independent workers. Rust + Tauri. No subscription, no cloud dependency.</div> |
| 434 |
</div> |
| 435 |
|
| 436 |
<div class="stats"> |
| 437 |
<div class="stat"> |
| 438 |
<span class="num">5</span> |
| 439 |
<span class="label">Integrated domains</span> |
| 440 |
</div> |
| 441 |
<div class="stat"> |
| 442 |
<span class="num">14</span> |
| 443 |
<span class="label">Built-in themes</span> |
| 444 |
</div> |
| 445 |
<div class="stat"> |
| 446 |
<span class="num">4</span> |
| 447 |
<span class="label">Email providers</span> |
| 448 |
</div> |
| 449 |
<div class="stat"> |
| 450 |
<span class="num">40+</span> |
| 451 |
<span class="label">MCP tools</span> |
| 452 |
</div> |
| 453 |
<div class="stat"> |
| 454 |
<span class="num">$0</span> |
| 455 |
<span class="label">Subscription fees</span> |
| 456 |
</div> |
| 457 |
</div> |
| 458 |
|
| 459 |
<div class="intro"> |
| 460 |
Most productivity apps do one thing. GoingsOn does five — tasks, email, calendar, contacts, and projects — in one native desktop app with a single local database. No juggling Todoist plus Spark plus Google Calendar. One search, one keyboard, one place for everything. |
| 461 |
</div> |
| 462 |
|
| 463 |
<div class="highlight-box"> |
| 464 |
<p>Everything cross-links. <strong>Create a task from an email.</strong> Link events to contacts. View all tasks, emails, and events for a project on one dashboard. Snooze an email and it reappears like a snoozed task. The five domains are not separate apps bolted together — they share one database, one search index, and one keyboard-driven interface.</p> |
| 465 |
</div> |
| 466 |
|
| 467 |
<h2>Task Management</h2> |
| 468 |
|
| 469 |
<div class="features"> |
| 470 |
<div class="feature-card"> |
| 471 |
<h3>Urgency & Priority</h3> |
| 472 |
<ul> |
| 473 |
<li>TaskWarrior-inspired urgency scoring algorithm</li> |
| 474 |
<li>Factors: due date proximity, age, priority, overdue penalty</li> |
| 475 |
<li>Three priority levels (High, Medium, Low)</li> |
| 476 |
<li>Automatic urgency classes for visual styling</li> |
| 477 |
<li>Overdue tracking with visual indicators</li> |
| 478 |
</ul> |
| 479 |
</div> |
| 480 |
<div class="feature-card"> |
| 481 |
<h3>Workflow</h3> |
| 482 |
<ul> |
| 483 |
<li>Snooze until later today, tomorrow, weekend, or next week</li> |
| 484 |
<li>Mark as “waiting for response” with visual badge</li> |
| 485 |
<li>Recurrence: daily, weekly, monthly, yearly</li> |
| 486 |
<li>Timestamped annotations (notes on tasks)</li> |
| 487 |
<li>Subtasks with progress tracking</li> |
| 488 |
</ul> |
| 489 |
</div> |
| 490 |
<div class="feature-card"> |
| 491 |
<h3>Quick Add</h3> |
| 492 |
<ul> |
| 493 |
<li>Natural language parsing in one input field</li> |
| 494 |
<li><code>Fix bug due:tomorrow +H @Project</code></li> |
| 495 |
<li>Priority, due date, project, recurrence, tags</li> |
| 496 |
<li>Keyboard shortcut: press <kbd>q</kbd> from anywhere</li> |
| 497 |
</ul> |
| 498 |
</div> |
| 499 |
<div class="feature-card"> |
| 500 |
<h3>Views & Bulk Ops</h3> |
| 501 |
<ul> |
| 502 |
<li>Filter by status, project, priority, milestone, snoozed</li> |
| 503 |
<li>Sort by description, project, due date, urgency</li> |
| 504 |
<li>Saved views: pin any filter combination</li> |
| 505 |
<li>Bulk complete, snooze, or delete with multi-select</li> |
| 506 |
</ul> |
| 507 |
</div> |
| 508 |
</div> |
| 509 |
|
| 510 |
<h2>Email Client</h2> |
| 511 |
|
| 512 |
<div class="feature-section"> |
| 513 |
<ul> |
| 514 |
<li>Connect any IMAP/SMTP account</li> |
| 515 |
<li>Fastmail OAuth with native JMAP protocol support</li> |
| 516 |
<li>Google, Microsoft, and Yahoo OAuth (PKCE flow)</li> |
| 517 |
<li>Background sync on configurable interval</li> |
| 518 |
<li>Threaded email display with proper In-Reply-To headers</li> |
| 519 |
<li>Compose and reply in a separate window</li> |
| 520 |
<li>Mark read/unread, archive/unarchive</li> |
| 521 |
<li>Snooze emails (reappear after snooze time)</li> |
| 522 |
<li>Create task directly from any email</li> |
| 523 |
<li>Link emails to projects</li> |
| 524 |
<li>Unread count badge on macOS dock icon</li> |
| 525 |
<li>Bulk operations: mark read, archive, snooze, delete</li> |
| 526 |
</ul> |
| 527 |
</div> |
| 528 |
|
| 529 |
<div class="footer"> |
| 530 |
<div class="left">GoingsOn — v0.3.1</div> |
| 531 |
<div class="right">makenot.work</div> |
| 532 |
</div> |
| 533 |
|
| 534 |
</div> |
| 535 |
|
| 536 |
|
| 537 |
|
| 538 |
|
| 539 |
<div class="page"> |
| 540 |
|
| 541 |
<h2>Day Planning & Time Blocking</h2> |
| 542 |
|
| 543 |
<div class="two-col"> |
| 544 |
<div class="col"> |
| 545 |
<h3>Visual Timeline</h3> |
| 546 |
<p>Hourly timeline for the day. Drag unscheduled tasks onto time slots to create blocks. Events display alongside your task blocks. Current time indicator shows where you are. Navigate between days with <kbd>[</kbd> and <kbd>]</kbd>.</p> |
| 547 |
</div> |
| 548 |
<div class="col"> |
| 549 |
<h3>Weekly Review</h3> |
| 550 |
<p>Built-in weekly review workflow. See completed tasks from the past week, set focus tasks for the coming week, and track vacation days. A nudge system reminds you when your review is overdue.</p> |
| 551 |
</div> |
| 552 |
</div> |
| 553 |
|
| 554 |
<h2>Calendar & Contacts</h2> |
| 555 |
|
| 556 |
<div class="features"> |
| 557 |
<div class="feature-card"> |
| 558 |
<h3>Events</h3> |
| 559 |
<ul> |
| 560 |
<li>Title, description, start/end time, location</li> |
| 561 |
<li>Link events to projects and contacts</li> |
| 562 |
<li>Recurrence: daily, weekly, monthly, yearly</li> |
| 563 |
<li>Upcoming event list with collapsible past events</li> |
| 564 |
<li>Events appear on the day plan timeline</li> |
| 565 |
</ul> |
| 566 |
</div> |
| 567 |
<div class="feature-card"> |
| 568 |
<h3>Contacts</h3> |
| 569 |
<ul> |
| 570 |
<li>Display name, nickname, company, title, timezone</li> |
| 571 |
<li>Multiple emails, phones, social handles per contact</li> |
| 572 |
<li>Custom fields for any additional data</li> |
| 573 |
<li>Tag contacts for filtering and grouping</li> |
| 574 |
<li>Birthday tracking, notes, search by name or email</li> |
| 575 |
</ul> |
| 576 |
</div> |
| 577 |
</div> |
| 578 |
|
| 579 |
<h2>Projects & Milestones</h2> |
| 580 |
|
| 581 |
<div class="highlight-box"> |
| 582 |
<p>Create projects with types (Job, Side Project, Company, Essay, Article, Painting) and statuses (Active, Inactive, Archived). Each project gets a <strong>dashboard</strong> showing its tasks, events, and linked emails in columns. Add <strong>milestones</strong> with target dates and completion tracking to mark major phases. View all project work in one place.</p> |
| 583 |
</div> |
| 584 |
|
| 585 |
<h2>Search & Navigation</h2> |
| 586 |
|
| 587 |
<div class="two-col"> |
| 588 |
<div class="col"> |
| 589 |
<h3>Full-Text Search</h3> |
| 590 |
<p>Search across tasks, projects, emails, and contacts from one input (FTS5). Click any result to navigate directly to that item. Finds matches in descriptions, email bodies, contact names, and more.</p> |
| 591 |
</div> |
| 592 |
<div class="col"> |
| 593 |
<h3>Saved Views</h3> |
| 594 |
<p>Save any filter configuration as a named view. Pin views for one-click access from the sidebar. Combine status, project, priority, milestone, and snoozed filters into reusable queries.</p> |
| 595 |
</div> |
| 596 |
</div> |
| 597 |
|
| 598 |
<h2>Keyboard-Driven</h2> |
| 599 |
|
| 600 |
<div class="shortcuts"> |
| 601 |
<div class="shortcut"><kbd>q</kbd> Quick-add task</div> |
| 602 |
<div class="shortcut"><kbd>j</kbd><kbd>k</kbd> Navigate items</div> |
| 603 |
<div class="shortcut"><kbd>c</kbd> Complete task</div> |
| 604 |
<div class="shortcut"><kbd>s</kbd> Snooze</div> |
| 605 |
<div class="shortcut"><kbd>S</kbd> Schedule (day plan)</div> |
| 606 |
<div class="shortcut"><kbd>n</kbd> New item</div> |
| 607 |
<div class="shortcut"><kbd>a</kbd> Archive email</div> |
| 608 |
<div class="shortcut"><kbd>/</kbd> Search</div> |
| 609 |
<div class="shortcut"><kbd>?</kbd> Shortcuts overlay</div> |
| 610 |
<div class="shortcut"><kbd>g</kbd><kbd>t</kbd> Go to tasks</div> |
| 611 |
<div class="shortcut"><kbd>g</kbd><kbd>e</kbd> Go to email</div> |
| 612 |
<div class="shortcut"><kbd>g</kbd><kbd>d</kbd> Go to day plan</div> |
| 613 |
</div> |
| 614 |
|
| 615 |
<h2>Themes</h2> |
| 616 |
|
| 617 |
<div class="highlight-box"> |
| 618 |
<p>14 built-in themes, plus Follow System (auto light/dark). Includes <strong>Neobrute</strong> (default), <strong>Sandstone</strong>, <strong>Catppuccin</strong> (4 variants), <strong>Dracula</strong>, <strong>Nord</strong>, <strong>Tokyo Night</strong>, and more. TOML-based theme spec — edit colors, radii, shadows, and textures in a single file.</p> |
| 619 |
</div> |
| 620 |
|
| 621 |
<h2>Extensibility</h2> |
| 622 |
|
| 623 |
<div class="features"> |
| 624 |
<div class="feature-card"> |
| 625 |
<h3>Rhai Plugin System</h3> |
| 626 |
<ul> |
| 627 |
<li>Import tasks, projects, and contacts from CSV</li> |
| 628 |
<li>Sandboxed Rhai scripting — no arbitrary code</li> |
| 629 |
<li>Plugin registry with hot-reload</li> |
| 630 |
<li>Write custom importers without recompiling</li> |
| 631 |
</ul> |
| 632 |
</div> |
| 633 |
<div class="feature-card"> |
| 634 |
<h3>MCP Server</h3> |
| 635 |
<ul> |
| 636 |
<li>40+ structured tools for Claude Desktop</li> |
| 637 |
<li>Create, list, complete, snooze, search tasks</li> |
| 638 |
<li>Export roadmaps, manage projects, query data</li> |
| 639 |
<li>App auto-refreshes when agents modify data</li> |
| 640 |
</ul> |
| 641 |
</div> |
| 642 |
</div> |
| 643 |
|
| 644 |
<div class="footer"> |
| 645 |
<div class="left">GoingsOn — v0.3.1</div> |
| 646 |
<div class="right">makenot.work</div> |
| 647 |
</div> |
| 648 |
|
| 649 |
</div> |
| 650 |
|
| 651 |
|
| 652 |
|
| 653 |
|
| 654 |
<div class="page" style="display: flex; flex-direction: column;"> |
| 655 |
|
| 656 |
<h2>LLM Integration</h2> |
| 657 |
|
| 658 |
<div class="highlight-box"> |
| 659 |
<p>Connect to <strong>Ollama</strong>, <strong>OpenAI</strong>, or any compatible LLM provider. Use <strong>LLM templates</strong> in task descriptions for dynamic text expansion and an AI-Fill button for on-demand generation. Test your connection from settings. Responses are cached locally. All processing stays on your terms — use a local model for full privacy, or a cloud provider when convenience matters.</p> |
| 660 |
</div> |
| 661 |
|
| 662 |
<h2>Cloud Sync (Optional)</h2> |
| 663 |
|
| 664 |
<div class="highlight-box"> |
| 665 |
<p>Sync tasks, projects, events, contacts, email accounts, and settings across devices via <strong>MNW SyncKit</strong>. End-to-end encrypted — the server stores only ciphertext, never your data. Device management and full disconnect/wipe support. <strong>No account required to use the app</strong> — sync is entirely opt-in.</p> |
| 666 |
</div> |
| 667 |
|
| 668 |
<h2>Under the Hood</h2> |
| 669 |
|
| 670 |
<div class="feature-section"> |
| 671 |
<ul> |
| 672 |
<li>All data in local SQLite — no cloud required</li> |
| 673 |
<li>Notifications: snooze expiry, upcoming events, new email (native desktop)</li> |
| 674 |
<li>Manual and auto-scheduled backups with configurable retention</li> |
| 675 |
<li>Restore from any backup with one click</li> |
| 676 |
<li>Export: full database as JSON, tasks as CSV, events as ICS</li> |
| 677 |
<li>HTML email rendering (opens in browser)</li> |
| 678 |
<li>Virtual scrolling for large lists</li> |
| 679 |
<li>WCAG AA color contrast across all themes</li> |
| 680 |
<li>Paper texture, embossed text, tactile buttons (Skeubrute design)</li> |
| 681 |
</ul> |
| 682 |
</div> |
| 683 |
|
| 684 |
<h2>How It Compares</h2> |
| 685 |
|
| 686 |
<table class="comparison"> |
| 687 |
<tr> |
| 688 |
<th style="width:22%">Feature</th> |
| 689 |
<th style="width:13%">GO</th> |
| 690 |
<th style="width:13%">Todoist</th> |
| 691 |
<th style="width:13%">Things 3</th> |
| 692 |
<th style="width:13%">Sunsama</th> |
| 693 |
<th style="width:13%">Notion</th> |
| 694 |
<th style="width:13%">Spark</th> |
| 695 |
</tr> |
| 696 |
<tr> |
| 697 |
<td>Tasks + Email + Calendar</td> |
| 698 |
<td><span class="check">Yes</span></td> |
| 699 |
<td>Tasks only</td> |
| 700 |
<td>Tasks only</td> |
| 701 |
<td>Partial</td> |
| 702 |
<td>Basic</td> |
| 703 |
<td>Email only</td> |
| 704 |
</tr> |
| 705 |
<tr> |
| 706 |
<td>Contacts</td> |
| 707 |
<td><span class="check">Yes</span></td> |
| 708 |
<td><span class="dash">—</span></td> |
| 709 |
<td><span class="dash">—</span></td> |
| 710 |
<td><span class="dash">—</span></td> |
| 711 |
<td><span class="dash">—</span></td> |
| 712 |
<td><span class="dash">—</span></td> |
| 713 |
</tr> |
| 714 |
<tr> |
| 715 |
<td>Weekly review</td> |
| 716 |
<td><span class="check">Yes</span></td> |
| 717 |
<td><span class="dash">—</span></td> |
| 718 |
<td><span class="dash">—</span></td> |
| 719 |
<td><span class="check">Yes</span></td> |
| 720 |
<td><span class="dash">—</span></td> |
| 721 |
<td><span class="dash">—</span></td> |
| 722 |
</tr> |
| 723 |
<tr> |
| 724 |
<td>Time blocking</td> |
| 725 |
<td><span class="check">Yes</span></td> |
| 726 |
<td><span class="dash">—</span></td> |
| 727 |
<td><span class="dash">—</span></td> |
| 728 |
<td><span class="check">Yes</span></td> |
| 729 |
<td><span class="dash">—</span></td> |
| 730 |
<td><span class="dash">—</span></td> |
| 731 |
</tr> |
| 732 |
<tr> |
| 733 |
<td>Urgency scoring</td> |
| 734 |
<td><span class="check">Yes</span></td> |
| 735 |
<td>4 levels</td> |
| 736 |
<td><span class="dash">—</span></td> |
| 737 |
<td><span class="dash">—</span></td> |
| 738 |
<td><span class="dash">—</span></td> |
| 739 |
<td><span class="dash">—</span></td> |
| 740 |
</tr> |
| 741 |
<tr> |
| 742 |
<td>Offline-first</td> |
| 743 |
<td><span class="check">Yes</span></td> |
| 744 |
<td><span class="dash">—</span></td> |
| 745 |
<td><span class="check">Yes</span></td> |
| 746 |
<td><span class="dash">—</span></td> |
| 747 |
<td>Limited</td> |
| 748 |
<td><span class="dash">—</span></td> |
| 749 |
</tr> |
| 750 |
<tr> |
| 751 |
<td>Plugin system</td> |
| 752 |
<td><span class="check">Rhai</span></td> |
| 753 |
<td><span class="dash">—</span></td> |
| 754 |
<td><span class="dash">—</span></td> |
| 755 |
<td><span class="dash">—</span></td> |
| 756 |
<td>API</td> |
| 757 |
<td><span class="dash">—</span></td> |
| 758 |
</tr> |
| 759 |
<tr> |
| 760 |
<td>MCP / LLM tools</td> |
| 761 |
<td><span class="check">40+</span></td> |
| 762 |
<td><span class="dash">—</span></td> |
| 763 |
<td><span class="dash">—</span></td> |
| 764 |
<td><span class="dash">—</span></td> |
| 765 |
<td>Built-in</td> |
| 766 |
<td>Built-in</td> |
| 767 |
</tr> |
| 768 |
<tr> |
| 769 |
<td>Source-available</td> |
| 770 |
<td><span class="check">Yes</span></td> |
| 771 |
<td><span class="dash">—</span></td> |
| 772 |
<td><span class="dash">—</span></td> |
| 773 |
<td><span class="dash">—</span></td> |
| 774 |
<td><span class="dash">—</span></td> |
| 775 |
<td><span class="dash">—</span></td> |
| 776 |
</tr> |
| 777 |
<tr> |
| 778 |
<td>Cross-platform</td> |
| 779 |
<td><span class="check">Yes</span></td> |
| 780 |
<td><span class="check">Yes</span></td> |
| 781 |
<td>Apple only</td> |
| 782 |
<td><span class="check">Yes</span></td> |
| 783 |
<td><span class="check">Yes</span></td> |
| 784 |
<td><span class="check">Yes</span></td> |
| 785 |
</tr> |
| 786 |
<tr> |
| 787 |
<td>Mobile app</td> |
| 788 |
<td>Planned</td> |
| 789 |
<td><span class="check">Yes</span></td> |
| 790 |
<td><span class="check">Yes</span></td> |
| 791 |
<td><span class="check">Yes</span></td> |
| 792 |
<td><span class="check">Yes</span></td> |
| 793 |
<td><span class="check">Yes</span></td> |
| 794 |
</tr> |
| 795 |
<tr> |
| 796 |
<td>No subscription</td> |
| 797 |
<td><span class="check">Yes</span></td> |
| 798 |
<td>$48/yr</td> |
| 799 |
<td>~$80 once</td> |
| 800 |
<td>$192/yr</td> |
| 801 |
<td>$120/yr</td> |
| 802 |
<td>$60/yr</td> |
| 803 |
</tr> |
| 804 |
</table> |
| 805 |
|
| 806 |
<div class="highlight-box"> |
| 807 |
<p><strong>Free during alpha.</strong> Native desktop app for macOS, Windows, and Linux via Tauri. iOS in development. Source-available under PolyForm Noncommercial 1.0.0. The closest competitor charging for similar scope is Sunsama at $192/year.</p> |
| 808 |
</div> |
| 809 |
|
| 810 |
<div class="footer-inline" style="margin-top: 12px;"> |
| 811 |
<div class="left">GoingsOn — v0.3.1</div> |
| 812 |
<div class="right">makenot.work</div> |
| 813 |
</div> |
| 814 |
|
| 815 |
</div> |
| 816 |
|
| 817 |
</body> |
| 818 |
</html> |
| 819 |
|