jeremied / analytique Goto Github PK
View Code? Open in Web Editor NEWLightweight analytics system
Lightweight analytics system
Merge all google domains into one, for example.
Also maybe use a favicon in the data point lists? Could allow for some fun stuff in the future.
Google:
google.com, google.ca, google.fr, google.nl, etc.
Facebook:
l.facebook.com, facebook.com, m.facebook.com, etc.
Instagram:
l.instragram.com, instagram.com, etc.
Pinterest:
pinterest.com, pinterest.es, etc.
Perhaps in a wiki-style manner, maybe on GitHub.
Including Get Started, Contributing, as well as full code docs.
So that is doesn't change too often and avoids arbitrary floats
Would benefit from a graph view instead of data point list.
EN/FR by me. Infrastructure for others but I won't do anymore.
Code is in English.
Alternate stat: Exit rate (Number of exits ÷ number of views for page)
Potentially means that the beacon must wait for an unload event before sending.
To keep using the sendBeacon
API, a mechanism needs to be implemented to delay sending for an arbitrary amount of time.
Or, maybe, additional data is completely separate from the base view data. The additional data would be sent separately from the view and would thus require separate counting. The view data would only contain data inherent to the browser and view event. Things like button clicks and game scores and behaviour on page wouldn't be associated to a session.
UTM solution as well. https://plausible.io/blog/utm-tracking-tags
But I would like to overhaul how we think about these. I would also like to get rid of the "UTM" name. It should be explained clearly somewhere though.
Like Time of Day, would probably benefit from a graph view instead of just a data point list.
I'm dumb and forgot that sometimes sessions will be intertwined and thus the algorithm fails to aggregate views.
The views → sessions algorithm needs to be refactored to take that into account.
Targets are WebKit, Chromium and Gecko on Windows, macOS and Linux.
Mobile platforms are not really targets, at least for now, although some minimal testing might benefit security.
With comparison to previous stats? (+5)
It shouldn't divide the page views for the same path, but it could still be interesting to keep the fragment somewhere. Usage will vary a lot depending on the website so it should be nicely configurable.
It's probably a good idea to have features that allow extracting, deleting and ignoring beacons coming from specific IP addresses.
It might also be important to remind users of Analytique that they should tell their audience that they are tracking them in a Privacy Policy. ("Netiquette")
To allow potentially arbitrary characters.
File names are currently limited to [\w-@].
The data might go on left of the fold for example and you could simply scroll the view.
There might also be a + button that appears when hovering the X axis label that lets you zoom out. For exemple, changing "12 dernières semaines" to "24 dernières semaines".
Maybe with a simple scroll container? Maybe with an icon to indicate when there is more data? Use Scroll snap points?
Otherwise it could be an icon button that unwraps more data points / activates the scroll container.
That means the calendar UI needs a way to select multiple continuous days, probably by dragging.
Slide/scale the graphs whenever possible? Tick numbers (at least the big ones) up or down?
from
and to
with a parameter to choose the unit to return, those two getters could be used on JDDates as well and they would thus be mostly the same.Using config files for all patterns.
Ideally with a main/default/master config, that can be overriden/added to with origin-specific config.
AnalytiqueModule could be an object containing most of the fields that AnalytiqueListModule could inherit from. The drawing function would be reused for most modules but could be overriden.
I think modules should be their own sort of objects.
{
"type": "list",
"sessionKey": "referrerOrigin",
"statsKey": "referrerOrigins",
"basis": "sessionTotal",
"fromView": function,
"fromSessions": function,
"keyTransform": _identity,
"data": {
"categories": {
"Google": [ "google.com", "google.ca", "google.fr", "google.nl" ]
}
},
"strings": {
"title": {
"en": "Origines",
"fr": "Origines"
},
"description": {
"en": "Number of sessions per referrer, when acquisition was by reference.",
"fr": "Nombre de sessions par origine, lorsque l’acquisition s’est faite par référence."
}
},
"config": {
"useGroupsInOverview": true
}
}
The fromView
function takes in a view and outputs a session metric.
The fromSessions
function takes in a sessions container and outputs a stats metric.
strings
and data
are both variable objects that contain static data that other code in the module can use. It is meant to avoid constantly putting in and out of memory larger pieces of data. strings
is for human-readable text used in the rendering of the module, while data
is mostly used during processing of stats data.
Could be a secondary button that opens a contextual menu to select a range to compare against. That range would then be displayed alongside the main range. Slightly transparent in the graphs, and maybe using delta ± for numbers.
That means updating the read me and I guess making sure there are no sensible information anywhere.
I think we need three forms:
canonicalForm
(old shortForm
), which is the internal canonical form that contains no spaces. It's never meant to be displayed to the end-user.specialForm
, which is the short, human-readable version that can take many forms. "Aujourd'hui", "Hier", "28 derniers jours", etc. If no special case apply, it uses the niceForm.niceForm
is the human-readable, exact version that always uses days.
The niceForm
could be displayed with the origin selector when different from the specialForm.
Only "days" mode is missing.
Central and invisible API for routing and serving data, and possibly console output?
That I could reuse for all Node web projects.
A map view for the countries module could eventually be an option, but I don't think it's interesting enough on its own to be a priority. It's also not very interesting for most small-scale websites, which won't really have an international audience anyway. So it should be an option.
There might be nothing to optimize for now, but at least I'd have data to work with.
Hold and drag one bound to move it specifically?
Change the hold thing to click once per bound and hold and drag to move the selected bound? Like Google Analytics?
In a long long time, it might be nice to have a testing environment, because as more and more features are added to the analytics engine itself, the harder it is to actually measure their accuracy.
Some simple sanity checks could include testing that beacons are received and stored properly, checking that sessions that overlap in time are correctly reordered in the aggregation phase, checking that exclusions in the config are properly ignored (countries, IPs and bots), etc.
Refactor the Cities module to include all countries by default. Setting to only determine city for some countries.
Maybe it's not even necessary now that we got the filter working great. The idea at the start was just to mitigate the calls to the slow ipinfo.io API. But maybe it's not worth it anymore, especially since the city could be requested at the same time as the country, not taking any additional time.
So that it can be reused in both, and possibly more projects. I could serve CSS from one central location I guess. With optional components.
Everything should use SCSS, perhaps with some modules.
Text styles should be separated from semantic elements, and applied contextually or explicitly using class names.
Same for form components, their style should be decoupled from their semantic elements.
Make a big test page to test all components.
It might be a good idea to have a test page for some critical components like JDDate. It could be a simple page with some programmed tests for all functions and outcomes. Because you never know when an untested edge case is gonna affect something down the line.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.