Skip to content

Commit

Permalink
overwrite README.md with latest #23
Browse files Browse the repository at this point in the history
  • Loading branch information
nelsonic committed Jul 8, 2023
1 parent 3f0a6a0 commit 6875d50
Show file tree
Hide file tree
Showing 921 changed files with 5,265 additions and 85 deletions.
6 changes: 6 additions & 0 deletions .formatter.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
import_deps: [:ecto, :ecto_sql, :phoenix],
subdirectories: ["priv/*/migrations"],
plugins: [Phoenix.LiveView.HTMLFormatter],
inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}", "priv/*/seeds.exs"]
]
144 changes: 59 additions & 85 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,77 +1,6 @@
<<<<<<< HEAD
alvo
=======

> *alvo is our* ***Quest*** *is to* ***codify*** *the* ***vocabulary*** *that* ***people***
*use when teaching* ***each other*** *how to* ***interact*** *with the* ***web***.

![placeholder image](http://i.imgur.com/uQughKi.jpg)

**alvo** (pronounced "*al vu*!") enables ***non-technical people*** to ***understand*** and ***test*** the **web**.

## Why?


workflow:
+ watchify files in `/lib`
+ browserify files in `/lib`
pre-commit:
+ uglify build.js


### Story

We all have a ***personal story*** of teaching someone how to use the internet.
I have taught *many* people how to use the web (including how to write HTML/CSS/JS/PHP/etc)
but one that stands out as meaningful was in the winter of 2005 when I sat down and taught my (retired-journalist) *father*
how to get online, Search (Goolge) and send/read email. At the time I produced
a *bespoke* 30 page manual with detailed screenshots of each step he would need to perform to accomplish his desired task because I
*knew* he was was going to need to refer back to it after I left to go back to
university [a thousand miles away](http://www.wolframalpha.com/input/?i=distance+edinburgh+to+lisbon+as+the+crow+flies).
I did not publish this user manual because it contained passwords and photos of
my dad's actual equipment, but I wish I had kept it for posterity...
Anyway, what if there was a simpler way of doing that?
What if you could record a "Macro"

### Pain Point

As [***Creative Technologist***](https://markavnet.wordpress.com/2010/06/22/what-the-heck-is-a-creative-technologist/)
we *love* speaking to the ***people*** that *use* our products to get their *feedback*.
Often the people *using* our products are non-technical and thus showing them *code* is *futile*.
Non-technical people are not "*stupid*"
(many of the "product owners" and "end users" we've worked with are *insanely smart*!),
they just don't have [***time***](https://github.com/ideaq/time)
to know *everything* (*who does*?!) and thus learning to code (*in addition to their existing workload*)
is *impractical*.

So, we are on a *mission* to simplify web creativity for everyone!

## Features

### Plain English*

We want this to be as *simple* as possible, so we are
building it *from scratch* to look/read like English (*not code*).

A ***simple example*** of submitting a contact form using Liso:

```yml
visit /contact
input #text "I want to know more about alvo!"
input #email "[email protected]"
click #submit
```

That's it! it reads like english!

**Q**: *What* are the **#** (*hash*) simbols?
**A**: They are the id's of the form elements on the *contact* page.
(hint: *Scroll down* to the ***glossary*** to learn more)
=======
<div align="center">
<img src="https://github.com/dwyl/atm/assets/194400/1d71bfb3-1c55-46f0-8c0e-b72b725937bd" height="300">
<h1>**A**ctionable **T**imely **M**etrics.</h1>
>>>>>>> 5104fda (add intro logo see: https://github.com/dwyl/atm/issues/23#issuecomment-1626997323 🏧)
<h1><b>A</b>ctionable <b>T</b>imely <b>M</b>etrics.</h1>



Expand All @@ -90,10 +19,8 @@ in Web Application/Site Development,
with more than 100 project teams and organizations
we've noted one alarming fact:

**_Most_ Product Owners don't _check_ Google Analytics**
and use the **insights** to **_drive_ decisions**.


> **_Most_ Product Owners don't _check_ Google Analytics**
or use the **insights** to **_drive_ decisions**.

If the **_leaders_ aren't data driven**,
_nobody_ `else` in the team will be.
Expand All @@ -110,20 +37,67 @@ More detail in: https://github.com/dwyl/atm/issues/16

## Name? 🏧

"ATM" stands for "Actionable Timely Metrics" (_this is a ["backronym"](https://en.wikipedia.org/wiki/Backronym)). We **really** wanted to give this project a name that is both short, _memorable_ and helps stakeholders _understand_ the importance of analytics data to the organisation!

"ATM" stands for "**A**ctionable **T**imely **M**etrics"
(_this
["**backronym**"](https://en.wikipedia.org/wiki/Backronym)
is not accidental_).
We _really_ wanted to give this project a name
that is both short, _memorable_
and helps stakeholders _understand_
the importance of metrics to the organization!

![free-cash-withdrawals](https://github.com/dwyl/atm/assets/194400/78fda825-5f71-4eed-8738-aef033829d7c)

# Who?
We want `people` to understand that being data-driven
is like having a "**_free_**" **cash machine**.

This project aims to both _simplify_ the language/vocabulary around analytics/metrics and create a simple way of tracking _any_ event in _any_ web app.

If it's not _immediately obvious_ **Why** this project is valuable and **How** it works,
we have failed. So if you are scratching your head wondering: "_Is this for **me**?_" ...
**please _help_ us** by describing your situation so we can **_help_ you** realise the _value_ of the data you are sending to Google Analytics and then _ignoring_...

# Who?

This project if for the `people`
that _get_ it
and want an easy way for others
in their team/organization to do the same.

We aim to both
_simplify_ the language/vocabulary around analytics/metrics
and create a _simple_ way
of tracking _any_ event in _any_ web/mobile app.

If it's not _immediately obvious_ **Why** this project
is valuable and **How** it works, we have failed.
So if you are scratching your head wondering:
"_Is this for **me**?_" ...
**please _help_ us** by describing your situation
so we can **_help_ you** realize the _value_
of the data you are sending
to Google Analytics
and then _ignoring_...

# How?

+ [ ] Define the basic schema for an Events (Analytics) Table!
+ [ ] Implement it!
If you haven't already,
please try the demo:



## Run on `localhost`

To run the `ATM` on your machine,



1.

Run
`mix setup`
to install and setup dependencies.

Now visit
[`localhost:4000`](http://localhost:4000)
in your web browser.

## Contributing?

Please read the issues:
5 changes: 5 additions & 0 deletions assets/css/app.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";

/* This file is for your main application CSS */
41 changes: 41 additions & 0 deletions assets/js/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// If you want to use Phoenix channels, run `mix help phx.gen.channel`
// to get started and then uncomment the line below.
// import "./user_socket.js"

// You can include dependencies in two ways.
//
// The simplest option is to put them in assets/vendor and
// import them using relative paths:
//
// import "../vendor/some-package.js"
//
// Alternatively, you can `npm install some-package --prefix assets` and import
// them using a path starting with the package name:
//
// import "some-package"
//

// Include phoenix_html to handle method=PUT/DELETE in forms and buttons.
import "phoenix_html"
// Establish Phoenix Socket and LiveView configuration.
import {Socket} from "phoenix"
import {LiveSocket} from "phoenix_live_view"
import topbar from "../vendor/topbar"

let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content")
let liveSocket = new LiveSocket("/live", Socket, {params: {_csrf_token: csrfToken}})

// Show progress bar on live navigation and form submits
topbar.config({barColors: {0: "#29d"}, shadowColor: "rgba(0, 0, 0, .3)"})
window.addEventListener("phx:page-loading-start", _info => topbar.show(300))
window.addEventListener("phx:page-loading-stop", _info => topbar.hide())

// connect if there are any LiveViews on the page
liveSocket.connect()

// expose liveSocket on window for web console debug logs and latency simulation:
// >> liveSocket.enableDebug()
// >> liveSocket.enableLatencySim(1000) // enabled for duration of browser session
// >> liveSocket.disableLatencySim()
window.liveSocket = liveSocket

68 changes: 68 additions & 0 deletions assets/tailwind.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// See the Tailwind configuration guide for advanced usage
// https://tailwindcss.com/docs/configuration

const plugin = require("tailwindcss/plugin")
const fs = require("fs")
const path = require("path")

module.exports = {
content: [
"./js/**/*.js",
"../lib/*_web.ex",
"../lib/*_web/**/*.*ex"
],
theme: {
extend: {
colors: {
brand: "#FD4F00",
}
},
},
plugins: [
require("@tailwindcss/forms"),
// Allows prefixing tailwind classes with LiveView classes to add rules
// only when LiveView classes are applied, for example:
//
// <div class="phx-click-loading:animate-ping">
//
plugin(({addVariant}) => addVariant("phx-no-feedback", [".phx-no-feedback&", ".phx-no-feedback &"])),
plugin(({addVariant}) => addVariant("phx-click-loading", [".phx-click-loading&", ".phx-click-loading &"])),
plugin(({addVariant}) => addVariant("phx-submit-loading", [".phx-submit-loading&", ".phx-submit-loading &"])),
plugin(({addVariant}) => addVariant("phx-change-loading", [".phx-change-loading&", ".phx-change-loading &"])),

// Embeds Heroicons (https://heroicons.com) into your app.css bundle
// See your `CoreComponents.icon/1` for more information.
//
plugin(function({matchComponents, theme}) {
let iconsDir = path.join(__dirname, "./vendor/heroicons/optimized")
let values = {}
let icons = [
["", "/24/outline"],
["-solid", "/24/solid"],
["-mini", "/20/solid"]
]
icons.forEach(([suffix, dir]) => {
fs.readdirSync(path.join(iconsDir, dir)).map(file => {
let name = path.basename(file, ".svg") + suffix
values[name] = {name, fullPath: path.join(iconsDir, dir, file)}
})
})
matchComponents({
"hero": ({name, fullPath}) => {
let content = fs.readFileSync(fullPath).toString().replace(/\r?\n|\r/g, "")
return {
[`--hero-${name}`]: `url('data:image/svg+xml;utf8,${content}')`,
"-webkit-mask": `var(--hero-${name})`,
"mask": `var(--hero-${name})`,
"mask-repeat": "no-repeat",
"background-color": "currentColor",
"vertical-align": "middle",
"display": "inline-block",
"width": theme("spacing.5"),
"height": theme("spacing.5")
}
}
}, {values})
})
]
}
21 changes: 21 additions & 0 deletions assets/vendor/heroicons/LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2020 Refactoring UI Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
6 changes: 6 additions & 0 deletions assets/vendor/heroicons/UPGRADE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
You are running heroicons v2.0.16. To upgrade in place, you can run the following command,
where your `HERO_VSN` export is your desired version:

export HERO_VSN="2.0.16" ; \
curl -L "https://github.com/tailwindlabs/heroicons/archive/refs/tags/v${HERO_VSN}.tar.gz" | \
tar -xvz --strip-components=1 heroicons-${HERO_VSN}/optimized
3 changes: 3 additions & 0 deletions assets/vendor/heroicons/optimized/20/solid/academic-cap.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions assets/vendor/heroicons/optimized/20/solid/archive-box.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions assets/vendor/heroicons/optimized/20/solid/arrow-down.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions assets/vendor/heroicons/optimized/20/solid/arrow-left-circle.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions assets/vendor/heroicons/optimized/20/solid/arrow-left.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 6875d50

Please sign in to comment.