thread

thread

Lucidboard: A Kanban Tool with Phoenix LiveView

Hello, Elixir Forum!

https://github.com/djthread/lucidboard

I just wanted to take a moment to share a personal (MIT-licensed) project I’ve been working on recently. It’s called Lucidboard, and it’s more or less a Trello clone. It’s a real-time, collaborative tool where folks can all work on the same board at the same time. Cards can be created, arranged in columns, and voted on. Just this basic functionality is very useful for lean coffee and retrospective meetings as well as simple brainstorming or planning.

I work at a big company, and I actually built the original version of this application about 5 years ago, using Node.js and Angular 1.x. After all this time, despite bugs, performance issues, and a complete lack of ownership or maintenance, quite a number of teams are still using it! In my quest to share my love for the astonishingly good Elixir stack, I set about rebuilding the tool. We’ve just deployed it for team members to use a couple weeks ago, and the feedback is very positive so far; folks are jumping in and using it for their daily work already!

I want this to be a community effort, so I’ve accepted pull requests from a number of my teammates. If anyone out there might be interested to contribute anything, reach out & jump in! We welcome pull requests!

The idea is to start simple, and I think we’ve met this target by now. From here, we would like to continue adding features, many of which will be options, per board. For instance, you might like to see WHO created a card or have someone’s name as having a related action item. Perhaps comment threads on cards is important to you or a task status-type field. These things could be toggled as needed, and board templates let you create a new board with a pre-defined set of these settings.

As for roles, we currently have board “ownership” which allows someone to manage the board settings, and this can be delegated to other users. A nearer-term feature I think will be “private” boards where owners can grant others “observer” or “contributor” roles on the board to allow them to view or interact.

I think it goes without saying how incredible LiveView and of course the Elixir language has been in developing this, particularly but not nearly limited to the real-time aspects. Not needing to deal with client-side state is a massive relief, compared to the original version which where everything had to be implemented twice – once on the server and once in the browser. And I feel like the code is organized and easy to work with: a complete reversal to how I feel about the original project.

At any rate, feel free to set up an instance of this for yourself and play around. A local, docker-based dev environment can be spun up very easily. We’d love to hear what you think!

And thanks to @AstonJ for the invite to make this post. :slight_smile:

Most Liked

outlog

outlog

looks awesome! :clap: :clap:

tried to get it to run in dev.. can you post a pseudo dev.secret.exs for quick setting up? (lazywebbing a bit here :man_facepalming:) or did I miss a doc?

thread

thread

try bin/dev to start elixir and postgres docker containers, or bin/db if you’d rather use elixir on your host. Either way, it should create the dev.secret.exs file.

Let me know if you still have trouble!

outlog

outlog

ahh there it is.. told u I was lazywebbing (no docker here..)

creating dev.secret.exs with:

use Mix.Config

config :lucidboard, Lucidboard.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: System.get_env("PG_USER") || "yourpguser",
  password: System.get_env("PG_PASS") || "yourpass",
  database: System.get_env("PG_DB") || "lucidboard_dev",
  hostname: System.get_env("PG_HOST") || "localhost",
  pool_size: 10

and then

mix deps.get
cd assets; npm install; cd ..
mix ecto.setup
iex -S mix phx.server

got me going without docker - looks great, and impressive with liveview!

one bug:
reproduce:
create new board
create new card
notice dnd doesn’t work
reload - and it works..

debug and notice:
<meta name="board_id" content="#{board_id}">

isn’t being set when using the live_redirect(socket, to: Routes.live_path(socket, BoardLive, id)) in create_board_live.ex

notice it is being set correctly when using href="<%= Routes.live_path(LucidboardWeb.Endpoint, BoardLive, short_board.id) %>" in the dashboard template and dnd works then..

resolve:
no clue - could be a liveview bug

Where Next?

Popular in Discussions Top

Donovan
Hello everyone, I’m so glad to have discovered this awesome community. Thanks for creating it! This is my second post, and apologies for...
New
jeramyRR
This is an interesting article to read. Elixir’s performance, like usual, is excellent. However, it seems like the high CPU usage is co...
New
laiboonh
Hi all, I am trying to convince my team to use liveview over the current react. What are some of the points where one should consider us...
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
lorenzo
Hey everone! I created a prototype for my app using Nodejs for the api. But the framework I chose wasnt great (in general theresnt any g...
New
AstonJ
Are there any Elixir or Erlang libraries that help with this? I’ve been thinking how streaming services like twitch have exploded recentl...
New
Ankhers
Just a little information upfront. Generally speaking, if I feel like I need to either break a pipe chain or use an anonymous function in...
New
New
acrolink
How does the two languages compare when it comes to server side application development? Any experiences or ideas? Thank you.
New
dogweather
I wrote this comment on r/haskell, and it’s not popular there. :wink: But I think I’m on to something… Haskell reminds me of Java, and e...
New

Other popular topics Top

aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 39297 209
New
fayddelight
I tried installing elixir 1.11.2 erlang 23.3.4 via asdf in my zsh shell. Enabled the versions locally and globally. When I list them ...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
AstonJ
We’ve put together this wiki for Phoenix LiveView - please feel free to add any info you feel is worth including. What is Phoenix LiveV...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement