Releases: denoland/saaskit
v0.7.0
Highlights
This change focuses on cleaning up extraneous functionality and polishing the overall quality of the codebase. Some key changes in this release include:
- Upgrade to Fresh 1.6 and taking advantage of partials in the dashboard and Tailwind
- Remove notifications, comments and analytics functionality
- New welcome page for helping the webmaster further setup their SaaSKit-based app
- REST API documentation
What's Changed
Features
- feat: add cover image by @iuioiua in #597
- feat: harden headers security by @Jabolol in #592
- feat: welcome page by @iuioiua in #622
Fixes
- fix: prevent homepage from crashing by @mbhrznr in #583
- fix: prevent duplicate users in seed task by @digioak in #589
- fix: redirect to home page after project created by @harshmangalam in #587
- fix: account page spacing by @iuioiua in #600
- fix: premium state in users table by @iuioiua in #620
- fix: make
formatCurrency()
useen-US
locale by @iuioiua in #635
Testing
- test: add
assertIsPrice()
test by @iuioiua in #579 - test: add
POST /api/stripe-webhooks
tests by @iuioiua in #581 - test: add further tests by @iuioiua in #625
- test: further tidy e2e tests by @iuioiua in #607
- test: add further auth related tests by @iuioiua in #626
Documentation
- docs: rework features section by @iuioiua in #604
- docs: initial REST API reference by @iuioiua in #610
- docs: update deployment section of README by @lambtron in #615
- docs: correct JSDoc snippets by @iuioiua in #617
- docs: fix Discord link in README by @niranjan-kurhade in #637
- docs: add database JSDocs by @iuioiua in #578
New Contributors
- @digioak made their first contribution in #589
- @harshmangalam made their first contribution in #587
- @niranjan-kurhade made their first contribution in #637
- @marvinhagemeister made their first contribution in #643
- @deer made their first contribution in #646
Full Changelog: v0.6.1...v0.7.0
v0.6.1
Notice
In our efforts to make Deno SaaSKit as simple to use and easy to understand as possible, we will remove some functionality that we've realised is out-of-scope for this codebase as a SaaS template. The functionality in question includes notifications, commenting and item pages. These removals will make future maintenance smoother while not losing out on too much of what makes the Deno Hunt awesome. Thank you to those who have helped develop and implement these ideas. This release will serve as a snapshot of Deno SaaSKit for these features.
Highlights
Some key aspects of this release include:
- The addition of the Deno SaaSKit REST API
- Cursor-based pagination islands
- Significant improvements in documentation clarity and test coverage
- Improved ergonomics of error-handling
- Various performance improvements
What's Changed
Features
- feat: add styles for visited item links by @niklasmtj in #367
- feat: REST API for users by @iuioiua in #440
- feat: REST API for items and comments by @iuioiua in #441
- feat: cursor-based pagination for comments using "Load more" button by @iuioiua in #438
- feat: REST API and cursor-based pagination for notifications by @iuioiua in #442
- feat: add URL validation by @mbhrznr in #443
- feat: cursor-based pagination for users table by @iuioiua in #446
- feat: disallow duplicate entries for users by @mbhrznr in #447
- feat:
<ItemsList />
with cursor-based pagination by @iuioiua in #445 - feat: improved HTTP errors for REST API by @iuioiua in #444
- feat: protect routes plugin by @iuioiua in #487
- feat:
deno task db:restore
by @iuioiua in #535 - feat:
deno task cov:view
by @iuioiua in #558 - feat: fetch preload
GET /api/me/votes
when user is signed in by @iuioiua in #567
Fixes
- fix: submit route import by @iuioiua in #448
- fix: migration script by @iuioiua in #449
- fix: user not found by @iuioiua in #413
- fix: omit Stripe vars from
.example.env
by @iuioiua in #404 - fix:
timeAgo()
usage by @iuioiua in #456 - fix: correct
getCursor()
test location by @iuioiua in #482 - fix:
<ItemsList />
fetch resources order by @iuioiua in #485 - fix: only call
/api/me/votes
when being signed in by @mbhrznr in #534 - fix: encode URI components by @iuioiua in #538
- fix(blog): add
dateTime
attribute to<time>
by @iuioiua in #539 - fix:
db:migrate
task by @iuioiua in #536 - fix(profile): apply 2 column layout to Profile page by @hashrock in #553
- fix: avoid showing "No items found" stats in
<ItemsList />
by @roberto-morado in #559 - fix: active dashboard link by @mbhrznr in #521
Performance Improvements
- perf:
<MadeWithFreshBadge />
by @ryanponce in #518 - perf: use
rel=preload
for pages that perform fetching by @mbhrznr in #520 - perf:
<StaticVoteButton />
by @ryanponce in #517
Documentation
- docs:
CONTRIBUTING.md
by @iuioiua in #421 - docs: improve contributing guide by @iuioiua in #461
- docs: re-write "Get Started" README section by @iuioiua in #504
- docs: "Deploy to Production" cleanups by @iuioiua in #528
- docs: "Create a Blog Post" section by @iuioiua in #529
- docs: polish "Create a Blog Post" section by @iuioiua in #530
- docs: complete JSDocs for
utils/http.ts
by @iuioiua in #533
Refactors
- refactor:
/user
to/users
by @iuioiua in #419 - refactor:
/item
to/items
by @iuioiua in #420 - refactor: icons tweaks by @iuioiua in #422
- refactor: use async route components by @iuioiua in #424
- refactor: use
x/tabler_icons_tsx
import by @JacobDanton in #430 - refactor: move notifications REST API endpoint by @iuioiua in #451
- refactor: consolidate HTTP-related utilities by @iuioiua in #452
- refactor: improve "Load more" button design by @iuioiua in #453
- refactor: remove
getToggledStyles()
by @iuioiua in #454 - refactor: polish display utilities by @iuioiua in #455
- refactor: remove submission validations and island utilities by @iuioiua in #457
- refactor: move Deno KV OAuth (auth) logic into custom plugin by @iuioiua in #458
- refactor: change e2e test name and point to "Writing tests" Fresh example by @iuioiua in #459
- refactor: session middleware by @iuioiua in #486
- refactor: move
POST /submit
toPOST /api/items
by @iuioiua in #493 - refactor: use ULID for notifications functionality by @iuioiua in #483
- refactor: remove
getValue()
by @roberto-morado in #499 - refactor: move
POST /items/[id]
toPOST /api/comments
by @iuioiua in #494 - refactor: rename and restructure
/tools
folder by @rj2704 in #503 - refactor: use ULIDs for comment functionality by @iuioiua in #502
- refactor: cleanup
db:reset
script by @iuioiua in #509 - refactor: simplify
db:dump
task by @iuioiua in #511 - refactor: cleanup Stripe logic by @iuioiua in #525
- refactor: use npm specifier for feed package by @iuioiua in #526
- refactor: polish posts tests and documentation by @iuioiua in #531
- refactor: complete
utils/display.ts
tests and docs by @iuioiua in #532 - refactor: use ULIDs for items by @iuioiua in #514
- refactor: move
fetchValues()
by @iuioiua in #540 - refactor: cleanup
hasNotifications
symbol by @iuioiua in #541 - refactor: expand test coverage to
/routes
by @iuioiua in #560 - refactor: revert #560 by @iuioiua in #561
- refactor: error middleware and improvements by @iuioiua in #543
- refactor:
getAndDeleteNotification()
by @iuioiua in #544 - refactor: move notification logic into
createComment()
by @iuioiua in #568 - refactor: tweak
<NotificationsList />
design by @iuioiua in #548 - refactor: error handling plugin by @iuioiua in #550
- refactor: remove
compareScore()
by @iuioiua in #551 - refactor: improve and document users logic by @iuioiua in #554
- refactor:
after:content
for new window symbol by @iuioiua in #556 - refactor: remove
assertIsEntry()
by @gaurab-khanal in #477
Chores
- chore: upgrade to Fresh v1.4.2 by @iuioiua in #428
- chore: upgrade to deno_kv_oauth@0.5.0 by @iuioiua in #450
- chore:
deno task check:types
by @iuioiua in #426 - chore: remove
/tools/migrate_kv.ts
by @iuioiua in #479 - chore: remove roadmap reference by @iuioiua in #480
- chore: add
--doc
totest
task and correct JSDocs by @iuioiua in #489 - chore: remove lighthouse in CI by @iuioiua in #490
- chore: expand test code coverage by @iuioiua in #495
- chore(deps): bump actions/checkout from 3 to 4 by @dependabot in #498
- chore: updat...
v0.6.0
What's Changed
Features
- feat:
deleteItem()
anddeleteComment()
by @iuioiua in #306 - feat: pagination for authors page by @brunocorrea23 in #322
- feat: notifications by @brunocorrea23 in #321
- feat: replace custom chart island with
fresh_charts
by @mbhrznr in #376 - feat: adding notification for new votes by @brunocorrea23 in #350
- feat:
<Share />
by @iuioiua in #402 - feat:
getToggledStyles()
by @iuioiua in #363 - feat: stats behind auth by @brunocorrea23 in #382
- feat:
<GitHubAvatarImg />
by @iuioiua in #385 - feat: add RSS feed link to footer by @iuioiua in #372
- feat: add GitHub profile to user's page by @niklasmtj in #356
- feat:
ensureSignedInMiddleware()
by @iuioiua in #390 - feat: users table by @iuioiua in #396
Fixes
- fix: page input doesn't submit upon change by @iuioiua in #308
- fix: remove deprecated
incrementAnalyticsMetricPerDay()
by @boscohyun in #313 - fix: comment input width by @iuioiua in #314
- fix(stats): populate empty chart axis by @mbhrznr in #289
- fix: stats graphs on mobile screens by @iuioiua in #319
- fix: stats graphs alignments by @iuioiua in #320
- fix: Stripe types and checks by @nicu-chiciuc in #264
- fix(frontend): redesign pricing by @hashrock in #341
- fix: user link on pricing page by @brunocorrea23 in #349
- fix: user triggers own notifications by @brunocorrea23 in #352
- fix: correct description in README by @boscohyun in #353
- fix: target
es2022
forChart.js
import and upgrade to v4.3.0 by @iuioiua in #357 - fix: notification dot position by @brunocorrea23 in #337
- fix: blog dark theme styling by @iuioiua in #342
- fix: links do not have a discernible name by @iuioiua in #331
- fix: avatar resolution by @brunocorrea23 in #383
- fix: header breaks on mobile screens by @hashrock in #374
- fix: feed and add test by @iuioiua in #371
- fix: use TabsBar style at TimeSelector by @hashrock in #406
- fix: add an empty state to the project list by @hashrock in #405
- fix: notifications route by @iuioiua in #392
Docs
Refactors
- refactor: fresh coat of paint and visual cleanups by @iuioiua in #311
- refactor: simplify analytics-KV data by @iuioiua in #312
- refactor: analytics into atomic operations by @brunocorrea23 in #296
- refactor: tweak visual design of
/stats
page by @iuioiua in #316 - refactor: add top-margin to footer by @iuioiua in #317
- refactor: move
incrVisitsCountByDay()
to site middleware by @iuioiua in #318 - refactor: restructure components by @iuioiua in #328
- refactor: cleanup middleware by @iuioiua in #333
- refactor: simplify
<Meta />
by @iuioiua in #334 - refactor: stats charts improvements and simplifications by @iuioiua in #343
- refactor: add spice to submit buttons by @iuioiua in #364
- refactor: remove use of
assertAlmostEquals()
by @iuioiua in #362 - refactor: design and code cleanups by @iuioiua in #365
- refactor: various visual improvements by @iuioiua in #373
- refactor: re-introduce
<Head />
by @iuioiua in #379 - refactor: rename user page param to
login
by @iuioiua in #387 - refactor: move premium user badge by @iuioiua in #388
- refactor: use
userLogin
property inComment
interface by @iuioiua in #389 - refactor: restructure routes by @iuioiua in #391
- refactor: redesign submit page by @iuioiua in #395
- refactor: remove
notifications_by_time
key use by @iuioiua in #394 - refactor: rework notifications pages by @iuioiua in #393
- refactor: heading tweaks by @iuioiua in #399
- refactor: remove
user.id
use and rework vote logic by @iuioiua in #401 - refactor: improve
ifUserHasNotifications()
perf by @iuioiua in #330
Tests
- tests(db): test
compareScore()
andgetAreVotedBySessionId()
by @niklasmtj in #300 - test(http): basic endpoint tests by @mbhrznr in #325
Chores
- chore: delete dummy data by @iuioiua in #307
- chore: improve coverage around
voteCount
by @brunocorrea23 in #310 - chore: exclude
cov/
from all checks by @iuioiua in #332 - chore: cleanup KV by @iuioiua in #361
- chore: parallel tests by @iuioiua in #380
- chore: upgrade to Fresh v1.3 by @iuioiua in #381
- chore: cleanup dummy data by @iuioiua in #384
New Contributors
- @boscohyun made their first contribution in #313
- @nicu-chiciuc made their first contribution in #264
- @hashrock made their first contribution in #341
Full Changelog: v0.5.0...v0.6.0
v0.5.0
What's Changed
- feat: make Stripe optional by @iuioiua in #302
- feat: redirect to new host by @iuioiua in #305
- feat: make charts start at 0 by @lino-levan in #287
- fix: redirect to correct endpoint by @Jabolol in #271
- fix:
assertAlmostEquals()
tolerance in tests by @iuioiua in #304 - fix: add reference to unstable types by @smitssjors in #279
- fix: avatar size by @brunocorrea23 in #278
- fix: default timeAgo by @brunocorrea23 in #295
- fix(blog): respect user theme choice by @niklasmtj in #299
- test(utils): further improve test coverage by @mbhrznr in #303
- test(utils): increase test coverage by @mbhrznr in #273
- docs: add Codecov badge by @iuioiua in #272
- docs: fix typo by @iuioiua in #280
- refactor: items logic in KV by @iuioiua in #284
- refactor: comment logic in KV by @iuioiua in #290
- refactor: user logic in KV by @iuioiua in #292
- refactor: cleanup
twind
-related functionality by @iuioiua in #282 - chore: add CI badge by @iuioiua in #269
- chore: resize images / improve web perf by @brunocorrea23 in #277
- chore: update to
fresh@1.2.0
by @brunocorrea23 in #274 - chore: upgrade to
deno_kv_oauth@v0.2.5
by @lino-levan in #297 - chore: cleanups and ignore
.idea
folder by @vicky-gonsalves in #298 - chore: upgrade to
deno_kv_oauth@v0.2.4
by @iuioiua in #283 - chore: add typos check in CI by @iuioiua in #281
- chore: set
KV_PATH
environment variable by @iuioiua in #285 - chore: add note about
presetAutoprefix()
removal by @iuioiua in #288
New Contributors
- @smitssjors made their first contribution in #279
- @mbhrznr made their first contribution in #273
- @vicky-gonsalves made their first contribution in #298
Full Changelog: v0.4.0...v0.5.0
v0.4.0 - Deno KV OAuth
Deno SaaSKit now has the desired features we'd like for v1. Now, we need to shift to polishing the codebase so that it's impressive enough, from a technical standpoint, for the v1 launch. Upcoming PRs should focus on the following:
- Reducing code duplication
- Improving testing
- Cleaning up any unnecessary code or features
- Improving web performance
- Documenting code, design and features
Suggestions are also welcome! Check out the roadmap if you'd like to more.
What's Changed
- feat: integrate Deno KV OAuth by @iuioiua in #252
- feat: pagination on the item page for comments + time-ago filter by @brunocorrea23 in #257
- feat: redirect to referrer page after login by @huai-jie in #249
- fix: charts not responsive by @huai-jie in #259
- fix:
bigint
serialization error by @Jabolol in #263 - docs: add Docker files by @lambtron in #253
- chore: setup Codecov by @iuioiua in #266
- chore: update
deno_kv_oauth
to 0.1.18-beta by @iuioiua in #258
New Contributors
Full Changelog: v0.3.0...v0.4.0
v0.3.0
What's Changed
-
feat: adding new stats by @brunocorrea23 in #244
-
feat: homepage pagination and local db seeding by @zzeleznick in #221
-
feat: user pages by @brunocorrea23 in #229
-
feat: stats/charts page by @brunocorrea23 in #235
-
feat: avatar images on profile page by @zzeleznick in #220
-
feat: page-number-based pagination on homepage by @iuioiua in #242
-
refactor: minor cleanup of
createServerSupabaseClient()
by @iuioiua in #187 -
refactor: move
deleteUser()
to test file by @iuioiua in #225 -
refactor: simplify and move
<PostCard />
by @iuioiua in #166 -
refactor: account page design improvements by @iuioiua in #178
-
fix:
deno task check:license
permissions by @iuioiua in #175 -
fix: append cookies in the response from supabase by @zaynetro in #203
-
fix: cannot read properties of undefined (reading 'isSubscribed') on account page by @huai-jie in #207
-
fix: move comment box to top by @lino-levan in #214
-
docs: filter Stripe events for
listen
command by @iuioiua in #177 -
docs: fix README spacing and numbering by @Baqirkhan in #238
New Contributors
- @zaynetro made their first contribution in #203
- @lino-levan made their first contribution in #214
- @zzeleznick made their first contribution in #220
- @brunocorrea23 made their first contribution in #229
- @Baqirkhan made their first contribution in #237
- @load1n9 made their first contribution in #219
Full Changelog: v0.2.0...v0.3.0
v0.2.0
What's Changed
In this release, the demo app for Deno SaaSKit is now Deno Hunt (think Hackers News or Product Hunt, but for Deno). Share your coolest and juiciest Deno projects for the internet to see and explore what others have built! Also, we've transitioned to using Deno KV as the main data store. In the next release, we'll work towards having a more complete feature set, making current features more straightforward and increasing site reliability and modularity. Stay tuned! 🦕
-
feat: initial version of Deno Hunt and restructure by @iuioiua in #106
-
feat: redirect to item page after submission by @iuioiua in #147
-
fix/refactor: simplify db types and re-introduce
getOrCreateUser()
by @iuioiua in #139 -
refactor: remove
BASE_
prefix from constants names by @iuioiua in #121 -
refactor: move
STRIPE_PREMIUM_PLAN_PRICE_ID
to environmental variable by @iuioiua in #127 -
docs: add DENO_DEPLOYMENT_ID env variable by @cdoremus in #155
New Contributors
Full Changelog: v0.1.0...v0.2.0
v0.1.0
Announcement
Currently, the Deno SaaSKit demo is based on a dummy to-do list app. We'll soon be pivoting our approach and instead turning it into Deno Hunt! On Deno Hunt, you'll be able to share your fresh and crispy Deno projects for the community to discover, like Product Hunt (hence the name) and Hacker News. For devs, you can clone the project and build your own Deno Hunt-like project or cut and mix the tools that Deno SaaSKit provides to make your own highly customised SaaS website.
Deno Hunt will be available as part of Deno SaaSKit v1. If you'd like to partake in the building of Deno Hunt, please look at the GitHub issues or join us in the #saaskit Discord channel.
What's changed
-
feat: add general footer to blog pages by @niklasmtj in #33
-
feat:
deno task test
and basic contributing guide by @iuioiua in #34 -
feat: add basic markdown based blog by @niklasmtj in #18
-
feat/chore: type-checking in CI and update dependencies by @iuioiua in #68
-
feat: meta tag component by @niklasmtj in #66
-
feat:
deno task init:stripe
and further documentation improvements by @iuioiua in #93 -
feat: run CI on the 3 major OS platforms by @iuioiua in #101
-
fix: links not clickable across entire area by @iuioiua in #22
-
fix:
SUPABASE_SERVICE_KEY
missing letter by @niklasmtj in #32 -
fix: remove
--cached-only
flag fromstart
task by @iuioiua in #51 -
fix:
/login
should redirect if user is logged in by @iuioiua in #85 -
fix:
<OAuthLoginButton />
and<PricingCard />
style regressions by @iuioiua in #90 -
docs: clarify premium price id in
constants.ts
by @niklasmtj in #8 -
docs: minor clarifications for middleware by @iuioiua in #15
-
docs: Add missing start command by @Chris-James in #54
-
docs: add "Extending Deno SaaSKit" section by @iuioiua in #94
-
docs: "Customisation" section and further tweaks by @iuioiua in #98
-
refactor:
createOrGetCustomer()
in middleware state by @iuioiua in #28 -
refactor: replace components with style strings by @iuioiua in #67
-
refactor: better environmental variable names by @iuioiua in #88
-
chore: some supabase and stripe suggestions. by @thorwebdev in #19
-
chore: add customer table migration. by @thorwebdev in #43
-
chore: add basic meta tags to blog by @niklasmtj in #50
-
chore: upgrade to
fresh@1.1.5
and usetwind@1
by @huai-jie in #89
New Contributors
- @niklasmtj made their first contribution in #8
- @iuioiua made their first contribution in #11
- @thorwebdev made their first contribution in #19
- @rroblf01 made their first contribution in #39
- @lambtron made their first contribution in #44
- @Chris-James made their first contribution in #54
- @huai-jie made their first contribution in #89
Full Changelog: https://github.com/denoland/saaskit/commits/v0.1.0