thread

thread

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:

Showing Posts 1 to 5

AstonJ

AstonJ

Looks great Adam, thanks for sharing :023:

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 OP

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

thread

thread OP

Fantastic. Thank you so much for mentioning that, @outlog!

Setting up the create board screen as a LiveView was one of the last things I did, and I didn’t notice that regression.

It’s fixed in the latest master as I’m now sending you to the board you just created with redirect instead of live_redirect, so it loads the whole page. I was actually surprised that live_redirect actually worked in the first place as the board is an entirely separate LiveView. I figure this usage with live_redirect may or may not be something LV would ultimately support.

https://github.com/djthread/lucidboard/commit/bbbc76ed772b706f78b2f5de95eda6928f9ff1bd#diff-6f9a5689f2113b4c2d3ed0081f742df9L70

— All posts loaded —

Where Next? Top

Trending in Discussions Top

AstonJ
As the title says, please share what you’ve been up to with Elixir. Whether that’s been learning it, looking into it, making stuff with i...
2977 91898 914
New
AstonJ
The obligatory hello world thread! Who are you and where are you from? :stuck_out_tongue:
4616 55835 594
New
byu
@chrismccord : I just saw the Extract AGENTS.md from Phoenix.new into phx.new generator commit to the phoenix project. My initial shotgu...
New
arcanemachine
I was working on an Ecto migration and I needed a timestamp. So, for the nth time, I looked up the different data types for timestamps, a...
New
alexslade
Fly’s CEO posted this recently - Turn And Face The Strange · The Fly Blog It says that Fly is going all-in on sprites, which is a worry ...
New
Herve37
We’re evaluating API mocking tools for OpenAPI-based projects and would love to hear what other teams are using. We’re particularly inte...
New
matt-savvy
Is there a word for the ~> symbol used in Version strings? Do you also just call it a Squiggle Arrow™ ?!
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews