Codestats.net - made with Elixir + Phoenix

phoenix
graphql
re:dom
#1

I hope this is ok to share in this section. :slight_smile:

I have made a coding statistics website with Elixir and Phoenix. The basic idea is that when you write code, you get experience points and then you level up (like in an RPG). You can see how much you have “experience” in different languages and on different machines you use. It’s open source and free to use. Currently only Atom editor and JetBrains IDEs are supported (the API is documented, though, if you want to add editor support!).

Here is the index page: https://codestats.net/ and as an example, here is my profile page: https://codestats.net/users/Nicd.

It is a pretty standard Phoenix website. I use ETS for caching some data locally (it runs on one node) and store per-user cached data using PostgreSQL’s JSON field. Both profile pages and the index page are live updated while you code using Phoenix channels, and Elm in the frontend (it looks roughly like this, though the index page UI has since changed a bit).

In the future I plan to add more different statistics and other fun features.

All the code is licensed under 3-clause BSD, you can find the sources for the site, Atom plugin and JetBrains plugin respectively here:

It’s my second ever production Phoenix site, and first ever Elm project, Atom plugin and JetBrains plugin, so the code will reflect that. I would appreciate any feedback so I can become better. :slight_smile:

9 Likes
#2

Heh, looks nice, although being able to log in with google and/or github (especially github) would be more logical given the site purpose? :slight_smile:

Github has a good API too, though slow it is.

EDIT: Also, how easy is it to game? Might be more accurate to parse over git commits instead for lines changed and so forth? Still gameable but not as easy?

#3

Thanks! :slight_smile: That is true, but it’s not high on my priority list currently. Registering is very easy as you only need a username and password, but I admit many people would like to use some other site’s accounts too. I will add an issue about it but I cannot say when I can take up on it.

Very easy! Just send a request to the API with a million points. It’s not easy to make it cheater proof so I have adopted the stance that if you want to mess up your own statistics, it’s your own shame. Of course that will mess up the index page in its current version, but if that happens I will figure out something different to show there.

If you really wanted to cheat, creating lots of git commits wouldn’t be an issue either. Using git commits would have a downside though, you would maybe only get feedback at the end of the day. And then maybe you add some big file in the commit with thousands of lines that you didn’t write and you get lots of meaningless points. On the other hand all those changes and iterations that didn’t end up in the commit wouldn’t be counted. Maybe not all code even ends up in a repository. That’s why it’s integrated with the editor.

Thanks for the suggestions!

1 Like
#4

I had the same site idea a long while back but could not figure out an easy way to fix those points I brought up too. ^.^

#5

Seems like a nice project, I wouldn’t be able to think about something similar, it’s pretty interesting. I’d like to see a plugin for ST3 and Emacs :slight_smile:

Cheers.

#6

Just curious, how many active users do you have?

#7

At the moment, 220.

#8

Nice one! Looks neat :023:

If you get a minute, please do a write-up on you Elm-Elixir experience - there is certainly a lot of love for Elm in the Elixir community :slight_smile:

#9

Elm was… interesting. I have never used Haskell or another ML and Elixir was my first functional language. So it took me a while to really grok the Elm syntax and what was happening. I still have only a faint idea about some of the things but most of it is clear now.

It lived up to its reputation in that when my frontend apps finally compiled, they really did work as expected. I didn’t really get to enjoy any productivity boosts from that though, since doing anything was very very slow (but it was my first try ever). I liked the builtin virtual DOM library, but I was kind of disappointed that it’s not possible to have Elm parse the existing DOM and change that (have to render the whole thing from scratch).

All in all it was a fun learning experience and I look forward to seeing how it develops.

2 Likes
#10

So after about 1.5 years in production, Code::Stats has just passed the 1000 user mark and we’re working on improving it. :slight_smile:

Since the first post, we have added integrations for Sublime Text 3, Visual Studio Code, Visual Studio (still some bugs to iron out), and Zsh. We also have a plugin in the works for Vim - if you’d like to help test it, you can contact us on our Gitter, Matrix, or IRC channels.

On the website side we’re working on a 2.0 version that will have a complete UI rewrite with RE:DOM (in place of Elm) and CSS Grid. The backend is updated to Phoenix 1.3 and refactored into a context-ish style (still learning this). Currently I’m working on a new profile API using GraphQL via Absinthe.

Of course it’s still all free to use and open source. :slight_smile: The sources have moved to GitLab, so you can follow our progress here: https://gitlab.com/code-stats

6 Likes
#11

We now have Vim support! It has been tested by a couple of people but I’m not a Vim user so if you have issues, please report them to us. :slight_smile:

4 Likes
#12

There is a cool android app to check the stats:

https://play.google.com/store/apps/details?id=com.geekapps.codetrack

2 Likes
#13

2.0 was released just now. It has a new UI, new graphs, Elm was replaced with RE:DOM, it has a GraphQL API written with Absinthe, and finally Distillery releases! It’s also a big quality of life upgrade on the backend so hopefully new releases should be much easier to make from this point forward. Still totally free to use!

2 Likes
#14

Interested to know why this change?

#15

In the end it was about productivity. Elm was interesting and new but I was very slow with it. As I have limited time to work on this project, I went with a more pragmatic solution. I have been thinking of looking at ReasonML though, at least for some project.

2 Likes