Skip to content
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Run tests with coverage report on master, otherwise just test Apr 6, 2019
assets Use am/pm time style on /live Apr 30, 2019
config Switch to a customer ResponseCache plug Feb 5, 2019
docker Make S3 storage class configurable & default to STANDARD Apr 13, 2019
lib Use am/pm time style on /live Apr 30, 2019
nginx Improve proxy tests & run from single Makefile Mar 9, 2019
priv/repo/migrations Support for posts having external canonical URLs Apr 5, 2019
script Add a reverse lookup in the unused assets sript Apr 22, 2019
terraform Enable IPv6 for cdn.changelog.com Apr 17, 2019
test Fix slack countdown tests Apr 22, 2019
.all-contributorsrc docs: update .all-contributorsrc Apr 17, 2019
.credo.exs Update credo config, apply code formatting suggestions Oct 9, 2018
.dockerignore Do not send priv/db & tmp dirs to Docker, when building the app image Jan 18, 2019
.gitattributes Update path to vendored semantic assets Nov 7, 2017
.gitignore Use priv db & uploads in local Docker Stack Jan 18, 2019
.iex.exs Add โ€˜episode publishedโ€™ mailer and integrate it into the notifier Jan 23, 2019
LICENSE add license Oct 19, 2016
Makefile Add interactive-bootstrap make target Apr 13, 2019
README.md docs: update README.md Apr 17, 2019
coveralls.json configure coveralls Apr 11, 2017
docker-compose.yml Fix ports & expose docket-compose references Apr 17, 2019
infrastructure-developers.xml Add the latest infrastructure 2019 XMLs & PNGs Mar 4, 2019
infrastructure-operators.png Add the latest infrastructure 2019 XMLs & PNGs Mar 4, 2019
infrastructure-operators.xml Add the latest infrastructure 2019 XMLs & PNGs Mar 4, 2019
infrastructure-visitors.png Add the latest infrastructure 2019 XMLs & PNGs Mar 4, 2019
infrastructure-visitors.xml Add the latest infrastructure 2019 XMLs & PNGs Mar 4, 2019
infrastructure.png Add the latest infrastructure 2019 XMLs & PNGs Mar 4, 2019
infrastructure.xml Add the latest infrastructure 2019 XMLs & PNGs Mar 4, 2019
mix.exs Report test coverage to coveralls.io Mar 8, 2019
mix.lock Upgrade elixir deps Mar 30, 2019

README.md

changelog.com CircleCI All Contributors Coverage Status

Read the announcement post!

What is this?

This is the CMS behind changelog.com. It's an Elixir application built with the Phoenix web framework, PostgreSQL, and many other great open source efforts.

Why is it open source?

A few reasons:

  1. We love open source. Our careers (and livelihoods) wouldn't be possible without open source. Keeping it closed just feels wrong.
  2. Phoenix is really great, but it's young enough in its lifecycle that there aren't too many in-production, open source sites for people to refer to as examples or inspiration. We want to throw our hat into that ring and hopefully others will follow.
  3. Changelog is a community of hackers. We know open sourcing the website will lead to good things from y'all (such as bug reports, feature requests, and pull requests).

Should I fork this and use it as a platform?

Probably not. We won't stop you from doing it, but we don't advise it. This is not a general purpose podcasting CMS. It is a CMS that is specific to Changelog and our needs. From the design and layout to the data structures and file hosting, we built this for us. An example of just how custom it is โ€” we literally have our podcast names hardcoded in areas of the code. Yuck.

What is it good for?

If you're building a web application with Phoenix (or aspire to), this is a great place to poke around and see what one looks like when it's all wired together. It's not perfect by any means, but it works. And that's something. We've also been told that it is ridiculously fast.

If you have questions about any of the code, holler @Changelog. Better yet, join the community where we have in-depth discussions about software development, industry trends, and everything else under the sun.

How can I contribute?

Assuming that you have Docker running locally and docker-compose available, all you have to do is run rm -fr deps && docker-compose up in your terminal. When you run this command for the first time, it will take around 7 minutes to pull all Docker images, build the app image and start all containers. Depending on your internet connection and CPUs used for compiling various artefacts, this can easily take 30 minutes or more. Next time you run this command, since all Docker images will be cached, you can expect all containers to be up and running within 30 seconds.

When all containers are up and running, you should see the following output in your terminal session:

Starting changelogcom_db_1    ... done
Starting changelogcom_proxy_1 ... done
Recreating changelogcom_app_1 ... done
Attaching to changelogcom_db_1, changelogcom_proxy_1, changelogcom_app_1
...
db_1     | LOG:  autovacuum launcher started
db_1     | LOG:  database system is ready to accept connections
...
proxy_1  | dockergen.1 | 2018/07/20 16:01:05 Generated '/etc/nginx/conf.d/default.conf' from 3 containers
...
app_1    | [info] Running ChangelogWeb.Endpoint with Cowboy using http://0.0.0.0:4000
app_1    | yarn run v1.6.0
app_1    | warning package.json: No license field
app_1    | $ webpack --mode=development --watch-stdin --color
app_1    |
app_1    | Webpack is watching the filesโ€ฆ
...

You can access a dev copy of changelog.com locally, at http://localhost:4000

When you want to stop all Docker containers required to run a dev copy of changelog.com locally, press CTRL key and c at the same time (Ctrl+C).

If any app dependencies have changed, or the cached Docker app image has diverged from the source code, you will need to re-build it by running docker-compose build before you can run docker-compose up.

If you are running on macOS or Linux, all the above commands are available as make targets (e.g. build & contrib). Learn about all available commands by running make in your terminal.

By default, macOS ships with GNU Make v3.81. Our Makefile requires GNU Make >= 4 which can be installed via brew install make. By default, the make version that brew installs is invoked via gmake. For more info, see brew info make.

Please remember that we have a product roadmap in mind so open an issue about the feature you'd like to contribute before putting the time in to code it up. We'd hate for you to waste any of your time building something that may ultimately fall on the cutting room floor.

Why is Docker for Mac slow?

If you are running changelog.com locally via docker-compose up on a Mac, you might notice that pages take ~1.5s to load:

while true
do
  curl --silent --output /dev/null \
  --write-out '%{http_code} connect:%{time_connect} prepare:%{time_pretransfer} transfer:%{time_starttransfer} total:%{time_total}\n' \
  http://localhost:4000/
done
200 connect:0.004815 prepare:0.004849 transfer:1.488685 total:1.488921
200 connect:0.005061 prepare:0.005089 transfer:1.627873 total:1.628171
200 connect:0.005176 prepare:0.005211 transfer:1.566022 total:1.566123
^C

This is down to Docker for Mac networking integration with the OS, which is still the case in 18.09.0-ce-beta1.

The same test on Arch Linux 2018.10.1 running Docker 18.06.1-ce results in ~0.08s response times (20x faster):

200 connect:0.000569 prepare:0.000602 transfer:0.080425 total:0.080501
200 connect:0.000614 prepare:0.000650 transfer:0.083291 total:0.083407
200 connect:0.000611 prepare:0.000643 transfer:0.081731 total:0.081853
^C

Our thinking is: make it work first, make it right next & make it fast last. Contributions to make changelog.com dev on Docker for Mac fast are welcome! It would be especially interesting to know if ipvlan on macOS makes things better.

Code of Conduct

Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

Contributors

Thanks goes to these wonderful people (emoji key):

Jerod Santo
Jerod Santo

๐Ÿ’ป ๐Ÿ“– ๐Ÿš‡
Adam Stacoviak
Adam Stacoviak

๐ŸŽจ ๐Ÿ’ป ๐Ÿ’ต
Cody Peterson
Cody Peterson

๐ŸŽจ ๐Ÿ’ป
Jake Stutzman
Jake Stutzman

๐ŸŽจ
Tucker Cowie
Tucker Cowie

๐Ÿ’ป
Gerhard Lazu
Gerhard Lazu

๐Ÿš‡ ๐Ÿ’ป
Xinjiang Shao
Xinjiang Shao

๐Ÿ“– ๐Ÿ’ป
Steve Agalloco
Steve Agalloco

๐Ÿ’ป
David Gasperoni
David Gasperoni

๐Ÿ’ป
Nathan Youngman
Nathan Youngman

โš ๏ธ
Marco Vito Moscaritolo
Marco Vito Moscaritolo

๐Ÿ’ป
0x4e
0x4e

๐Ÿ’ป
Andrea Rossi
Andrea Rossi

๐Ÿ’ป
Tonฤ‡i Galiฤ‡
Tonฤ‡i Galiฤ‡

๐Ÿš‡
Jearvon Dharrie
Jearvon Dharrie

๐Ÿ’ป
Lee Jarvis
Lee Jarvis

Agusti Fernandez
Agusti Fernandez

๐Ÿ’ป
Len Payne
Len Payne

๐Ÿ’ป
JoeBew42
JoeBew42

๐Ÿ’ป
Griffin Byatt
Griffin Byatt

๐Ÿ’ป
Ridge Frederick
Ridge Frederick

๐Ÿ’ป ๐Ÿ›
Horst Rutter
Horst Rutter

๐Ÿ›
Nick Janetakis
Nick Janetakis

๐Ÿ› ๐Ÿ’ป
Ryan Will
Ryan Will

๐Ÿ› ๐Ÿ’ป
Dennis Reimann
Dennis Reimann

๐Ÿ’ป
Juan Soto
Juan Soto

๐Ÿ’ป
Jordy Zomer
Jordy Zomer

๐Ÿ’ป
Kevin Ball
Kevin Ball

๐Ÿ’ป
Mat Ryer
Mat Ryer

๐Ÿ’ป

This project follows the all-contributors specification. Contributions of any kind welcome!

You canโ€™t perform that action at this time.