Skip to content

skydread1/flybot.sg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

flybot logo
Clojure Version CI Contributions welcome

🔸 FLYBOT Web and Mobile App 🔸

This mono-repo hosts a Clojure(Script) full-stack web and mobile app.

💡 Rational

As a company specialized in Clojure, it made sense for us to have our Blog Website developed with Clojure(Script). We wanted to have a way to highlight what we do, our open-source contributions, our job offers and so on.

Moreover, the second goal of this project was too highlight some of our open-source libraries by @robertluo that belong to a stack we call lasagna as a reference to having separate layers of implementation as opposed to the spaghetti code and architecture we all fear.

This stack is currently composed of 2 libraries:

🔗 fun-map

Fun-Map is a Clojure library that blurs the line between identity, state, and function, providing a convenient way to perform associative dependency injections, allowing you to manage state and build systems with ease.

lasagna-pull is a Clojure library that provides an intuitive query language for precisely selecting and extracting data from deep and nested data structures, offering features like filtering, parameterization, and even pattern validation using malli schemas.

💎 Features

You can view the features of the web and mobile apps in:

🔸 Lasagna Stack

You can learn more about the rational of the lasagna stack libraries in:

Also, you can see how these libraries applied to our app in:

🖊️ Architecture

Our repo is a mono-repo that host the server, the web client and the mobile client.

The server is done in Clojure leveraging:

  • robertluo/fun-map for associative dependency injections
  • sg.flybot/lasagna-pull to represent the API as pure Clojure data and fetch only relevant data
  • aleph/aleph for server
  • metosin/reitit for routing
  • datalevin/datalevin for storage

The web client is done in ClojureScript leveraging:

  • reagent/reagent for React interfacing
  • re-frame/re-frame for state management
  • com.bhauman/figwheel-main for development tooling

The mobile client is done in ClojureScript leveraging:

  • io.vouch/reagent-react-native for React Native
  • re-frame/re-frame for state management
  • com.bhauman/figwheel-main for development tooling

To learn more about what our repo contain and how it is organized, consult:

⏳ Status

✔️ the web app is finished and hosted on AWS

🔨 the mobile app is not finished and was only tested on iOS locally (it is not a priority for us to release it at the moment)

▶️ Run the app

In the document How to run the different systems, you will find how to:

  • Start clj REPL
  • Start clj/cljs REPL for web dev
  • Start clj/cljs REPL for mobile dev (with Xcode simulator)
  • Run clj and cljs tests
  • Build the js bundle
  • Build an uberjar
  • Generate a container image locally or on AWS ECR

🛠️ Contributing

If you find any issue and want to contribute, you are welcome to do so!

The issue title is a problem you want to solve, for instance:

  • Post edits with no changes are still submitted
  • Users are not notified on successful actions

Add the # of the issue at the beginning of your forked branch (i.e. 12-fix-frontend-post-issue)