ianc

ianc

Introducing Travel Massive — a community platform built with Phoenix LiveView

Hey folks,

We built a community platform for Travel Massive with Phoenix LiveView. This is my first project with Phoenix LiveView, and the first time I’ve programmed in Elixir.

Here’s a few notable features:

Tech details

  • Currently running LiveView 0.17.11
  • We use a combination of LiveView Components and Surface UI with Tailwind CSS
  • Alpinejs 3 for a few user interactions (e.g. upvote), and Tippy for popups
  • We’re hosted on Gigalixir and Cloudinary (images)
  • esbuild only.. no npm required :tada:

Special thanks

A big thanks to @mplatts and @nhoban who developed our initial MVP and got us to launch last year, and @daamsie who helped with a lot of UX and other features. Also a thanks to elixirforum as I found a lot of helpful answers here while learning Elixir :smiley:

Migrating from Drupal to Phoenix LiveView

I originally created the Travel Massive community in 2014 and built it with Drupal 7 (and open-sourced the project). Migrating a live community of ~50,000 members from Drupal to Phoenix LiveView was a unique challenge. To solve this, we built built a private REST endpoint in Drupal to provide structured data to our Elixir importer. This method also gave us the benefit of developing the platform with real membership data.

What’s next?

We launched in September 2021 and I’ve spent the past year adding features, fixing bugs, and growing and building our community. The project has slowly matured, but I’m still thinking about new features to build:

  • Community points to reward participation
  • Travel map (people can share places they are visiting)
  • Automated newsletters (we currently curate a weekly newsletter)

Hopefully this post can help others who are thinking about building community platforms with Phoenix LiveView, and can help showcase what can be done! :slight_smile:

Most Liked

ianc

ianc

It felt like being in the deep end at the beginning, because I was learning both Elixir and Phoenix. Two things really helped me get over the learning curve:

  1. A working project / codebase to dive into
  2. A mentor to review my code and help me learn Elixir (e.g. answer all my newbie questions!)

On point 1, @mplatts created Petal Framework which is worth checking out.

It’s difficult to compare 1:1 because the new platform is simpler by design (more pragmatic, less features). However I find myself writing simpler, shorter code in Elixir.

Never! There are often “aha!” moments when you think “how the heck was I writing that in X when I could have been over here in Elixir doing this way simpler / faster!”

ianc

ianc

Our old platform was a combinaton of Drupal (member profiles, chapters, events, search), Wordpress (blog), Slims (jobs board), and Discourse (forum). We unified everything we needed into a single platform with Phoenix LiveView.

Our server runs with < 500mb memory and we do about ~100k views a month.

We’re using topbar. I previously had a spinner in top left. I don’t think we need to point out (too much) to users that we’re waiting for the socket to connect, so I prefer to keep it subtle.

AstonJ

AstonJ

This is awesome - congrats :tada:

Is the new site offering more or less the same as the Drupal site? If so I’d be interested to know whether anything changed on your server/hosting requirements? Could you also share how many page views you are serving a month?

Have you also experimented using a spinner instead of a progress bar for page loads? Personally I am not that keep on progress bars if the header always stays the same. Since you’re a travel site you could use a rotating globe as your spinner :003: On one of my sites we use a running dog (it’s a dog related site):

loader

Where Next?

Popular in Discussions Top

WildYorkies
It seems that the more I read, the more I find Elixir users speaking about all the ways that Elixir is not good for x, y, and z use cases...
New
crispinb
On reading dhh’s latest The One Person Framework it strikes me that Phoenix with LiveView is already pretty much this. However, never hav...
New
mmmrrr
Just saw that dhh announced https://hotwire.dev/ Is it just me or is this essentially live view? :smiley: Although I like the “iFrame-e...
New
nburkley
AWS re:Invent is on at the moment with some interesting announcements. One new feature in particular is the Lambda Runtime API for AWS La...
New
IVR
Hi all, I’ve seen a number of related threads in the past, but I’d still be very curious to hear an up-to-date opinion on this topic. I...
New
rower687
Hi all, I’ve been reading a lot about the “let it crash” term and how supervising processes and the whole messaging passing make an elixi...
New
jer
I’ve been using umbrellas for a while, and generally started off (on greenfield projects at least) by isolating subapps based on clearly ...
New
klo
Got a question about when to concat vs. prepending items to list then reversing to achieve appending. So i know lists boil down to [1 | ...
New
MarioFlach
Hello, I want to share a project I’ve been working on for a while: https://github.com/almightycouch/gitgud Background Some time ago I ...
New
fireproofsocks
This is more of a general question, but I’m wondering how other people in the community think about the pattern matching in function sign...
New

Other popular topics Top

hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a &gt; b) do {:ok, "a"} end if (a &lt; b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID&lt;0.412.0&gt; terminating ** (Postgrex.Error) FATAL...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 52673 488
New
saif
Hello everyone, Long time lurker first time poster here. I’ve recently begun working on Elixir full-time again! :raised_hands: It’s been...
New
Qqwy
Update: How to use the Blogs &amp; Podcasts section You can post links to your blog posts or podcasts either in one of the Official Blog...
3271 127089 1222
New
PeterCarter
There are pre-rolled solutions for other frameworks that do work. However, Phoenix does not seem to have these. Have people had good expe...
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement