rename from llmex to monotab

This commit is contained in:
2025-07-26 13:27:35 -04:00
parent 8da394b2a0
commit c993c04cdb
18 changed files with 105 additions and 85 deletions

View File

@@ -1,11 +1,11 @@
# llmex # MonoTab
## Getting Started ## Getting Started
Once you bootstrap and enter your project, fetch your dependencies and start the build server. The server is available at http://localhost:4999 Once you bootstrap and enter your project, fetch your dependencies and start the build server. The server is available at http://localhost:4999
```shell ```shell
cd llmex cd monotab
mix deps.get mix deps.get
mix tableau.server mix tableau.server

View File

@@ -1,8 +1,8 @@
--- ---
title: "Test Post: Getting Started with Elixir" title: "Test Post: Getting Started with Elixir"
date: "2024-01-15" date: "2024-01-15"
author: "Llmex Team" author: "MonoTab Team"
layout: Llmex.PostLayout layout: MonoTab.PostLayout
--- ---
# Getting Started with Elixir # Getting Started with Elixir
@@ -55,4 +55,4 @@ Elixir's pipe operator (`|>`) allows for clean, readable code:
|> Enum.count() |> Enum.count()
``` ```
This blog post is just a simple introduction to Elixir. Stay tuned for more in-depth tutorials and examples! This blog post is just a simple introduction to Elixir. Stay tuned for more in-depth tutorials and examples!

View File

@@ -1,5 +1,4 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
@@ -7,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title> <title>
Test Post: Getting Started with Elixir | Llmex Blog Test Post: Getting Started with Elixir | MonoTab Blog
</title> </title>
<link rel="stylesheet" href="/css/mono.css"> <link rel="stylesheet" href="/css/mono.css">
@@ -18,7 +17,7 @@
<body class="mono-all"> <body class="mono-all">
<aside> <aside>
<nav> <nav>
<h1><a href="/">Llmex Blog</a></h1> <h1><a href="/">MonoTab Blog</a></h1>
<ul> <ul>
<li><a href="/">Home</a></li> <li><a href="/">Home</a></li>
<li><a href="/posts">Posts</a></li> <li><a href="/posts">Posts</a></li>
@@ -71,7 +70,11 @@
<footer> <footer>
<p>&copy; 2025 Llmex Blog. Built with <a href="https://github.com/artalar/mono" target="_blank">Mono</a> and <a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a></p> <p>
&copy; 2025 MonoTab Blog. Built with
<a href="https://github.com/artalar/mono" target="_blank">Mono</a>
and <a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a>
</p>
</footer> </footer>
</main> </main>
</body> </body>

View File

@@ -1,5 +1,4 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
@@ -7,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title> <title>
Llmex Blog MonoTab Blog
</title> </title>
<link rel="stylesheet" href="/css/mono.css"> <link rel="stylesheet" href="/css/mono.css">
@@ -18,7 +17,7 @@
<body class="mono-all"> <body class="mono-all">
<aside> <aside>
<nav> <nav>
<h1><a href="/">Llmex Blog</a></h1> <h1><a href="/">MonoTab Blog</a></h1>
<ul> <ul>
<li><a href="/">Home</a></li> <li><a href="/">Home</a></li>
<li><a href="/posts">Posts</a></li> <li><a href="/posts">Posts</a></li>
@@ -31,8 +30,7 @@
<section> <section>
<h2>About</h2> <h2>About</h2>
<p> <p>
Welcome to Llmex Blog, a demonstration of building static sites with Elixir's Tableau generator. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi velit felis, fermentum id dolor luctus, pellentesque aliquam dui. In hac habitasse platea dictumst. Cras non erat sed risus aliquet molestie eu eget massa.
This blog showcases the power and elegance of functional programming applied to web development.
</p> </p>
</section> </section>
@@ -40,17 +38,21 @@
<h2>Technology Stack</h2> <h2>Technology Stack</h2>
<p>This blog is built using:</p> <p>This blog is built using:</p>
<ul> <ul>
<li><a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a> - Static site generator for Elixir</li> <li>
<li><a href="https://github.com/artalar/mono" target="_blank">Mono</a> - A brutalist CSS framework for clean, semantic styling</li> <a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a>
- Static site generator for Elixir
</li>
<li>
<a href="https://github.com/artalar/mono" target="_blank">Mono</a>
- A brutalist CSS framework for clean, semantic styling
</li>
</ul> </ul>
</section> </section>
<section> <section>
<h2>Our Philosophy</h2> <h2>Our Philosophy</h2>
<p> <p>
We believe in the power of functional programming to create maintainable, Proin nec sem vitae neque vehicula sagittis. Curabitur placerat, magna vel sodales rutrum, turpis massa cursus justo, quis faucibus nisl ante non est. Quisque eget dui venenatis, luctus ligula eget, malesuada nisl.
scalable, and elegant solutions. Through this blog, we aim to share insights,
tutorials, and experiences from the world of Elixir and functional web development.
</p> </p>
</section> </section>
@@ -63,7 +65,11 @@
</section> </section>
<footer> <footer>
<p>&copy; 2025 Llmex Blog. Built with <a href="https://github.com/artalar/mono" target="_blank">Mono</a> and <a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a></p> <p>
&copy; 2025 MonoTab Blog. Built with
<a href="https://github.com/artalar/mono" target="_blank">Mono</a>
and <a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a>
</p>
</footer> </footer>
</main> </main>
</body> </body>

View File

@@ -1,7 +1,7 @@
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel> <channel>
<atom:link href="http://localhost:4999/feed.xml" rel="self" type="application/rss+xml" /> <atom:link href="http://localhost:4999/feed.xml" rel="self" type="application/rss+xml" />
<title>llmex</title> <title>monotab</title>
<link>http://localhost:4999</link> <link>http://localhost:4999</link>
<description>My beautiful website</description> <description>My beautiful website</description>
<language>en-us</language> <language>en-us</language>

View File

@@ -1,5 +1,4 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
@@ -7,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title> <title>
Llmex Blog MonoTab Blog
</title> </title>
<link rel="stylesheet" href="/css/mono.css"> <link rel="stylesheet" href="/css/mono.css">
@@ -18,7 +17,7 @@
<body class="mono-all"> <body class="mono-all">
<aside> <aside>
<nav> <nav>
<h1><a href="/">Llmex Blog</a></h1> <h1><a href="/">MonoTab Blog</a></h1>
<ul> <ul>
<li><a href="/">Home</a></li> <li><a href="/">Home</a></li>
<li><a href="/posts">Posts</a></li> <li><a href="/posts">Posts</a></li>
@@ -29,15 +28,18 @@
<main> <main>
<section> <section>
<h2>Welcome to Llmex Blog</h2> <h2>Welcome</h2>
<p> <p>
A simple blog built with Elixir, Phoenix LiveView, and Tableau static site generator. A simple blog built with Elixir, Phoenix LiveView, and Tableau static site generator.
Explore our latest posts and insights on functional programming, web development, and more.
</p> </p>
</section> </section>
<footer> <footer>
<p>&copy; 2025 Llmex Blog. Built with <a href="https://github.com/artalar/mono" target="_blank">Mono</a> and <a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a></p> <p>
&copy; 2025 MonoTab Blog. Built with
<a href="https://github.com/artalar/mono" target="_blank">Mono</a>
and <a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a>
</p>
</footer> </footer>
</main> </main>
</body> </body>

View File

@@ -1,5 +1,4 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
@@ -7,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title> <title>
Llmex Blog MonoTab Blog
</title> </title>
<link rel="stylesheet" href="/css/mono.css"> <link rel="stylesheet" href="/css/mono.css">
@@ -18,7 +17,7 @@
<body class="mono-all"> <body class="mono-all">
<aside> <aside>
<nav> <nav>
<h1><a href="/">Llmex Blog</a></h1> <h1><a href="/">MonoTab Blog</a></h1>
<ul> <ul>
<li><a href="/">Home</a></li> <li><a href="/">Home</a></li>
<li><a href="/posts">Posts</a></li> <li><a href="/posts">Posts</a></li>
@@ -65,7 +64,11 @@
</section> </section>
<footer> <footer>
<p>&copy; 2025 Llmex Blog. Built with <a href="https://github.com/artalar/mono" target="_blank">Mono</a> and <a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a></p> <p>
&copy; 2025 MonoTab Blog. Built with
<a href="https://github.com/artalar/mono" target="_blank">Mono</a>
and <a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a>
</p>
</footer> </footer>
</main> </main>
</body> </body>

View File

@@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"><url><loc>http://localhost:4999/about</loc></url><url><loc>http://localhost:4999/</loc></url><url><loc>http://localhost:4999/posts</loc></url><url><lastmod>2024-01-15T00:00:00Z</lastmod><loc>http://localhost:4999/2024-01-15-test-post</loc></url></urlset> <?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"><url><loc>http://localhost:4999/posts</loc></url><url><loc>http://localhost:4999/</loc></url><url><loc>http://localhost:4999/about</loc></url><url><lastmod>2024-01-15T00:00:00Z</lastmod><loc>http://localhost:4999/2024-01-15-test-post</loc></url></urlset>

View File

@@ -3,17 +3,14 @@ import Config
config :tableau, :reloader, config :tableau, :reloader,
patterns: [ patterns: [
~r"^lib/.*.ex", ~r"^lib/.*.ex",
~r"^(_posts|_pages)/.*.md",~r"^extra/.*.(css|js)" ~r"^(_posts|_pages)/.*.md",
~r"^extra/.*.(css|js)"
] ]
config :web_dev_utils, :reload_log, true config :web_dev_utils, :reload_log, true
# uncomment this if you use something like ngrok # uncomment this if you use something like ngrok
# config :web_dev_utils, :reload_url, "'wss://' + location.host + '/ws'" # config :web_dev_utils, :reload_url, "'wss://' + location.host + '/ws'"
config :tableau, :config, config :tableau, :config,
url: "http://localhost:4999", url: "http://localhost:4999",
markdown: [ markdown: [
@@ -39,10 +36,9 @@ config :tableau, Tableau.SitemapExtension, enabled: true
config :tableau, Tableau.RSSExtension, config :tableau, Tableau.RSSExtension,
enabled: true, enabled: true,
title: "llmex", title: "monotab",
description: "My beautiful website" description: "My beautiful website"
config :elixir, :time_zone_database, Tz.TimeZoneDatabase config :elixir, :time_zone_database, Tz.TimeZoneDatabase
import_config "#{Mix.env()}.exs" import_config "#{Mix.env()}.exs"

View File

@@ -1,25 +1,25 @@
defmodule Llmex.IndexLayout do defmodule MonoTab.IndexLayout do
use Tableau.Layout, layout: Llmex.RootLayout use Tableau.Layout, layout: MonoTab.RootLayout
use Phoenix.Component use Phoenix.Component
def template(assigns) do def template(assigns) do
~H""" ~H"""
<h1><%= @page[:title] || "Latest Posts" %></h1> <h1>{@page[:title] || "Latest Posts"}</h1>
<%= if @page[:description] do %> <%= if @page[:description] do %>
<p><%= @page[:description] %></p> <p>{@page[:description]}</p>
<% end %> <% end %>
<%= if assigns[:posts] && length(@posts) > 0 do %> <%= if assigns[:posts] && length(@posts) > 0 do %>
<ul> <ul>
<%= for post <- @posts do %> <%= for post <- @posts do %>
<li> <li>
<h2><a href={post.permalink}><%= post.title %></a></h2> <h2><a href={post.permalink}>{post.title}</a></h2>
<%= if post[:date] do %> <%= if post[:date] do %>
<time datetime={post[:date]}><%= format_date(post[:date]) %></time> <time datetime={post[:date]}>{format_date(post[:date])}</time>
<% end %> <% end %>
<%= if post[:description] do %> <%= if post[:description] do %>
<p><%= post[:description] %></p> <p>{post[:description]}</p>
<% end %> <% end %>
</li> </li>
<% end %> <% end %>
@@ -28,7 +28,7 @@ defmodule Llmex.IndexLayout do
<p>No posts found.</p> <p>No posts found.</p>
<% end %> <% end %>
<%= {:safe, render(@inner_content)} %> {{:safe, render(@inner_content)}}
""" """
end end

View File

@@ -1,10 +1,10 @@
defmodule Llmex.PageLayout do defmodule MonoTab.PageLayout do
use Tableau.Layout, layout: Llmex.RootLayout use Tableau.Layout, layout: MonoTab.RootLayout
use Phoenix.Component use Phoenix.Component
def template(assigns) do def template(assigns) do
~H""" ~H"""
<%= {:safe, render(@inner_content)} %> {{:safe, render(@inner_content)}}
""" """
end end
end end

View File

@@ -1,12 +1,12 @@
defmodule Llmex.PostLayout do defmodule MonoTab.PostLayout do
use Tableau.Layout, layout: Llmex.RootLayout use Tableau.Layout, layout: MonoTab.RootLayout
use Phoenix.Component use Phoenix.Component
def template(assigns) do def template(assigns) do
~H""" ~H"""
<%= {:safe, render(@inner_content)} %> {{:safe, render(@inner_content)}}
<%= if @page[:date] do %> <%= if @page[:date] do %>
<time datetime={@page[:date]}><%= format_date(@page[:date]) %></time> <time datetime={@page[:date]}>{format_date(@page[:date])}</time>
<% end %> <% end %>
""" """
end end

View File

@@ -1,11 +1,10 @@
defmodule Llmex.RootLayout do defmodule MonoTab.RootLayout do
use Tableau.Layout use Tableau.Layout
use Phoenix.Component use Phoenix.Component
def template(assigns) do def template(assigns) do
~H""" ~H"""
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
@@ -13,21 +12,24 @@ defmodule Llmex.RootLayout do
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title> <title>
<%= [@page[:title], "Llmex Blog"] {[@page[:title], "MonoTab Blog"]
|> Enum.filter(& &1) |> Enum.filter(& &1)
|> Enum.intersperse("|") |> Enum.intersperse("|")
|> Enum.join(" ") %> |> Enum.join(" ")}
</title> </title>
<link rel="stylesheet" href="/css/mono.css" /> <link rel="stylesheet" href="/css/mono.css" />
<link rel="stylesheet" href="/css/responsive.css" /> <link rel="stylesheet" href="/css/responsive.css" />
<meta name="description" content={@page[:description] || "A simple blog built with Elixir and Tableau"} /> <meta
name="description"
content={@page[:description] || "A simple blog built with Elixir and Tableau"}
/>
</head> </head>
<body class="mono-all"> <body class="mono-all">
<aside> <aside>
<nav> <nav>
<h1><a href="/">Llmex Blog</a></h1> <h1><a href="/">MonoTab Blog</a></h1>
<ul> <ul>
<li><a href="/">Home</a></li> <li><a href="/">Home</a></li>
<li><a href="/posts">Posts</a></li> <li><a href="/posts">Posts</a></li>
@@ -37,16 +39,20 @@ defmodule Llmex.RootLayout do
</aside> </aside>
<main> <main>
<%= render @inner_content %> {render(@inner_content)}
<footer> <footer>
<p>&copy; <%= Date.utc_today().year %> Llmex Blog. Built with <a href="https://github.com/artalar/mono" target="_blank">Mono</a> and <a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a></p> <p>
&copy; {Date.utc_today().year} MonoTab Blog. Built with
<a href="https://github.com/artalar/mono" target="_blank">Mono</a>
and <a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a>
</p>
</footer> </footer>
</main> </main>
</body> </body>
<%= if Mix.env() == :dev do %> <%= if Mix.env() == :dev do %>
<%= Phoenix.HTML.raw(Tableau.live_reload(assigns)) %> {Phoenix.HTML.raw(Tableau.live_reload(assigns))}
<% end %> <% end %>
</html> </html>
""" """

View File

@@ -1,4 +1,4 @@
defmodule Mix.Tasks.Llmex.Gen.Post do defmodule Mix.Tasks.MonoTab.Gen.Post do
use Mix.Task use Mix.Task
@shortdoc "Generate a new post" @shortdoc "Generate a new post"
@@ -30,7 +30,7 @@ defmodule Mix.Tasks.Llmex.Gen.Post do
front_matter = """ front_matter = """
--- ---
layout: Llmex.PostLayout layout: MonoTab.PostLayout
title: \"#{post_title}\" title: \"#{post_title}\"
date: #{post_date} #{post_time} date: #{post_date} #{post_time}
permalink: /:title/ permalink: /:title/
@@ -42,4 +42,3 @@ defmodule Mix.Tasks.Llmex.Gen.Post do
Mix.shell().info("Succesfully created #{file_path}!") Mix.shell().info("Succesfully created #{file_path}!")
end end
end end

View File

@@ -1,7 +1,8 @@
defmodule Llmex.Pages.About do defmodule MonoTab.Pages.About do
use Tableau.Page, use Tableau.Page,
layout: Llmex.PageLayout, layout: MonoTab.PageLayout,
permalink: "/about" permalink: "/about"
use Phoenix.Component use Phoenix.Component
def template(assigns) do def template(assigns) do
@@ -9,8 +10,7 @@ defmodule Llmex.Pages.About do
<section> <section>
<h2>About</h2> <h2>About</h2>
<p> <p>
Welcome to Llmex Blog, a demonstration of building static sites with Elixir's Tableau generator. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi velit felis, fermentum id dolor luctus, pellentesque aliquam dui. In hac habitasse platea dictumst. Cras non erat sed risus aliquet molestie eu eget massa.
This blog showcases the power and elegance of functional programming applied to web development.
</p> </p>
</section> </section>
@@ -18,17 +18,21 @@ defmodule Llmex.Pages.About do
<h2>Technology Stack</h2> <h2>Technology Stack</h2>
<p>This blog is built using:</p> <p>This blog is built using:</p>
<ul> <ul>
<li><a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a> - Static site generator for Elixir</li> <li>
<li><a href="https://github.com/artalar/mono" target="_blank">Mono</a> - A brutalist CSS framework for clean, semantic styling</li> <a href="https://github.com/elixir-tools/tableau" target="_blank">Tableau</a>
- Static site generator for Elixir
</li>
<li>
<a href="https://github.com/artalar/mono" target="_blank">Mono</a>
- A brutalist CSS framework for clean, semantic styling
</li>
</ul> </ul>
</section> </section>
<section> <section>
<h2>Our Philosophy</h2> <h2>Our Philosophy</h2>
<p> <p>
We believe in the power of functional programming to create maintainable, Proin nec sem vitae neque vehicula sagittis. Curabitur placerat, magna vel sodales rutrum, turpis massa cursus justo, quis faucibus nisl ante non est. Quisque eget dui venenatis, luctus ligula eget, malesuada nisl.
scalable, and elegant solutions. Through this blog, we aim to share insights,
tutorials, and experiences from the world of Elixir and functional web development.
</p> </p>
</section> </section>

View File

@@ -1,16 +1,16 @@
defmodule Llmex.Pages.Index do defmodule MonoTab.Pages.Index do
use Tableau.Page, use Tableau.Page,
layout: Llmex.RootLayout, layout: MonoTab.RootLayout,
permalink: "/" permalink: "/"
use Phoenix.Component use Phoenix.Component
def template(assigns) do def template(assigns) do
~H""" ~H"""
<section> <section>
<h2>Welcome to Llmex Blog</h2> <h2>Welcome</h2>
<p> <p>
A simple blog built with Elixir, Phoenix LiveView, and Tableau static site generator. A simple blog built with Elixir, Phoenix LiveView, and Tableau static site generator.
Explore our latest posts and insights on functional programming, web development, and more.
</p> </p>
</section> </section>
""" """

View File

@@ -1,7 +1,8 @@
defmodule Llmex.Pages.Posts do defmodule MonoTab.Pages.Posts do
use Tableau.Page, use Tableau.Page,
layout: Llmex.IndexLayout, layout: MonoTab.IndexLayout,
permalink: "/posts" permalink: "/posts"
use Phoenix.Component use Phoenix.Component
def template(assigns) do def template(assigns) do

View File

@@ -1,9 +1,9 @@
defmodule Llmex.MixProject do defmodule MonoTab.MixProject do
use Mix.Project use Mix.Project
def project do def project do
[ [
app: :llmex, app: :monotab,
version: "0.1.0", version: "0.1.0",
elixir: "~> 1.15", elixir: "~> 1.15",
start_permanent: Mix.env() == :prod, start_permanent: Mix.env() == :prod,