Use Elixir to create the next Wordpress?

Thank you for all your responses, it boosted my confidence.

I thought I will list some of the top Wordpress plugins & find-out how to implement it, likely the most of them should be implemented in core, including:

  • Content management: should be like (Drupal, or Strapi) content types; User can define Post, Service, Project, …, & attach field to them
  • Querying, filter data: Ecto Query is a beast
  • The admin dashboard: not many people will use the admin dashboard, so we will keep all the state (Ecto data) in the LiveView socket, so mutations will be very fast; this is a big win
  • Field types: user also can define any field type, this will be validated with json schema (can replace Wordpress ACF Advanced custom field)
  • Products/orders: should be like Spree / Solidus
  • Rich text editor: Slate.js is a wonderful tooling for this (Slate can be serialize into json object), I think it should be handle on client side to reduce comunication between client-server (we later can use LiveView to render rich text object created by Slate)
  • Page builder: A block builder, just a set of some prebuilt component that can be composed
  • Dynamic routes: can be easily customized with Phoenix
  • SEO stuff: should be in core (like Yoast SEO)
  • SEO audit: should be in a separate app in umbrella; can analyze the content using internal (database) or external (send request) query
  • The system will expose an GraphQL endpoint using Absinthe
  • Image compression
    • When user upload an image, we will execute a sharp cli (will be bundled by the app) to generate derived images (argument should be like w_1200, w_1200,h_800 ), if it slow, we can make them communicate via RabbitMQ
  • Theming?
    • In some of my previous project, they were built with Svelte, React, Vue that consume data from GraphQL endpoint and bundled to ESM project, or docker image; managed by version. I see it’s too complicated.
    • Allow user to edit css directly, like some Tailwind editor out there, can be compiled & generate to minimized css
    • LiveView & Surface is evolving, so I thought we can build components using Surface. My try will be create an app for each theme, and call mix install (same for other plugins that haven’t listed above), do we have something like mix uninstall to unload an app?
  • Data Migration

Am I missing something important here? :smiley:
Thank you for reading; :smiley:

4 Likes