has_many :codes

Building DynaSite in public: landing page and waitlist


Update: see next post on changes I have made to the landing page to emphasise AI features and improve the copy.

I recently announced my intention to relaunch DynaBlogger as DynaSite , with the intention to extend the platform with more features such as support for static sites besides blogs. Since then I have:

  • switched to Cloudflare for SaaS for custom domains support
  • finished the comments feature, which you can see in action on this blog
  • started implementing the visual page builder
  • started to look into what payment and subscription management I should go with
  • prepared a landing page offering the possibility to join a whitelist with a discount promise on launch

I've already talked about custom domains in the previous post so I won't get into that. 

Comments support

For the comments feature I decided to build it in Vuejs instead of my usual Hotwire based approach; I love Hotwire's simplicity but for the comments I realised that a component-based design would make more sense, and in fact Vue made implementing comments much easier than it would have been with Hotwire.

Components are nice because allow defining a clear structure of all the blocks that make a comment thread as well as forms to submit new comments and other actions, but in particular they made it easier to implement "nesting" of comments and their replies in multiple levels.

I actually did most of the coding for the comments a while ago before shutting down the old DynaBlogger, so I recently had to finish the remaining 5% only.

For the default UX I took a lot of inspiration from Commento, which I had been using on this blog while I was building a native commenting feature. I also separated caching of the comments thread from the caching on the page, so that adding or updating a comment would not trigger rebuilding the page cache.

The workflow is pretty simple: user adds a comment, which is rendered in the page as "pending moderation", and the site owner receives a notification with the details of the comment and links that allow them to either approve the comment, or delete it in case it's spam. Since the only email sent until approval are sent to the site owner, I didn't add a captcha protection for now to keep things simple. Once the comment is approved, the author of the comment receives a notification confirming that their comment has been approved and is now visible to others. If the comment is a reply to another comment, authors of related comments also receive a notification about the new comment so they can also reply to it if they wish.

Another thing that I took care of is ensuring that the details of the comment are properly sanitised before rendering, to prevent from most Cross Site Scripting (XSS) attacks.

That's it about the comments, no much else to add about this feature for now.

Visual page builder

One of the weaknesses of the old DynaBlogger was the poor looks of the built in themes. While I implemented an awesome code editor with versioning that allows to edit the full code of a theme and see changes live instantly, I am not a designer so the themes didn't look very pretty.

So one of the goals with DynaSite is to improve in the design department, also because the platform is now intended to support static sites like portfolios, business landing pages etc which are expected to look good with responsive designs.

I originally started to build a visual page builder in Vuejs to make it easier for non technical users to build pretty websites, but I soon realised that it would have taken quite an effort and also I would still have the problem of me not being a designer and thus not being able to create nice looking themes.

Therefore after some research I decided to implement an existing library which works well and allows me to customise it for example to add support for custom templates - which can also be Liquid templates that allow injecting dynamic data, required for the blogging functionality.

The visual page builder is still a work in progress but it's looking good so far.

Payments and subscriptions management service

To implement payments and subscriptions I will go with a "Merchant of Record" for sure, since they deal with taxes on my behalf in exchange for higher fees. But the higher fees are worth the benefits. Besides not having to deal with taxes myself, with a merchant of record I only need to add a single reverse invoice for the bookkeeping, which becomes cheaper and easier than if I went with Stripe for example, where I would have to manage all customers myself.

I still need to decide between the well established Paddle and the newer Lemon Squeezy because I need to learn more about them and see which one would work best for me.

Landing page and waitlist

The last update for today is that I have prepared a landing page with the possibility for visitors to join a waitlist and reserve their position in a queue. This should hopefully help build some anticipation because there will be a heavily discounted paid plan on launch for early adopters, and this will be in a limited quantity, so the position in the queue is important.

I already received good feedback about the landing page from several people, who like it because it seems to do a good job at describing the product and the intentions behind it, as well as defining the target audience. You can find the landing page and join the waitlist at https://dynasite.dev/.

That's it for now. Stay tuned for further updates!

Update: see next post on changes I have made to the landing page to emphasise AI features and improve the copy.
© Vito Botta