Advice on building a Classifieds platform using Elixir appreciated

Hello all!

First post here, and it’s one asking for a bit of guidance. I’m currently building a classifieds app for my local area. The basic premise is that people can list items they want to sell (for a small fee), search the local area for items they may want to buy, and then enquire about them through an internal messaging system.

My background is JS development (and I could build this in a snap using Meteor… but can’t for reasons I won’t bore you with). I’ve already built a working version of the app using Firebase, VueJS (v1) and Algolia (for the search) that is 80% complete.

However, I’m at the stage where I lack confidence in the resulting code. I’m finding the SPA nature a hinderance, and have implemented some working, but “hacky” solutions to not having a backend server (to handle payments and Firebase <-> Algolia syncing). I feel that I’ve created tech debt before I’ve even finished, which is never ideal!

I’d rather start over, and use Elixir (and Phoenix) for the project. I’ve been reading up on, and playing with both for many months now; but haven’t really got to grips with it because I haven’t actually built anything with it, which is how I usually learn.

I’m familiar with Phoenix and it’s current way of doing thing (lots of MVC), but also Rob Connery’s approach (lean on OTP, umbrella projects, separate apps, fewer models - much like Phoenix 1.3 from the sounds of it). I’d prefer the latter, umbrella approach, but don’t feel I have the knowledge to stray too far from Phoenix’s well documented way of doing things.

I’d prefer server rendered markup for the most part, with progressive enhancement for the search (still via Algolia and a JS implementation of it) and the messaging (perhaps using Elm with Channels). I say this purely because the app won’t benefit hugely from the interactivity of an SPA (it’s basically CRUD with bells on!), and would rather not create another React app…

I’ve been spinning my wheels on this for a while now, struggling to actually get started. I feel that perhaps I need to build something following along with a tutorial, just so that I’ve got some experience under my belt before diving in. Could anyone recommend a tutorial, book, video course of series of blog posts that might help me along, and use similar methods and tools as I’d like to use?

Truthfully, I think my ambition (to use Elixir) has outstripped my ability, and know that the pragmatic solution is just to finish the VueJS version and manage/reduce the tech debt; but my gut tells me I’d regret it.

Cheers, Jamie!

1 Like

I’ll focus on the client-side rendering vs. server-side rendering part of your problem. If you do want your pages to be searchable by google, easily shareable on facebook, twitter etc. you should do server-side rendering, with progressive enhancement approach. On the other hand, if your app sits behind the login page, I think you can safely assume your clients will be JavaScript-enabled and do whatever gives them best user experience. I do not think the amount of people who insist on using the Web with JavaScript turned off is a bunch worth any focus at that stage. The only clients that have JS off and are worth caring about sharing / crawling bots. That’s my 5c :slight_smile:

1 Like

Thanks for your thoughts. That’s pretty much my conclusion too.

The only bits of my app that need JS is the searching for items, and messaging between users; two areas that I obviously wouldn’t want being indexed by Google or shared in any way.

Having things like my homepage, about page and all the listings being server-rendered and thus easily indexed and shared is far more important.

With that in mind, should I just follow along with something like ‘Programming Phoenix’ adapting each section to my specific needs (the way I learnt Meteor actually…)? Obviously, I’ll end up with a tightly coupled “website” and “app” rather than the decoupled, independent apps that would be preferred, but I’m guessing the learning curve won’t be as steep, and it could be refactored to multiple apps, in time, as my experience grows?

1 Like

Slightly off-topic, but I hope this is just a learning experience project, and not a real startup effort. There’s already offerup and letitgo that does the same thing, for free, with an already established huge userbase.

More of a side project than anything, there’s certainly no funding/investment/etc behind it. That said, the use of those platforms (and others) in the local area is incredibly low, and my dabbling in other, similar markets; has been really quite successful using the same business model.