diff --git a/ennstatus/static/js/yearbar.js b/ennstatus/static/js/yearbar.js
new file mode 100644
--- /dev/null
+++ b/ennstatus/static/js/yearbar.js
@@ -0,0 +1,90 @@
+d3.select(window).on("resize", throttle);
+var width = document.getElementById('yearchart').offsetWidth - 40 -30;
+var height = (width / 2) - 20 - 30;
+
+var svg, tip;
+
+setup(width, height);
+
+function setup(width, height) {
+	svg = d3.select("#yearchart").append("svg")
+		.attr("width", width)
+		.attr("height", height + 20 + 30)
+		.append("g")
+		.attr("transform", "translate(" + 40 + "," + 20 + ")");
+	tip = d3.tip()
+		.attr('class', 'd3-tip')
+		.offset([-10, 0])
+		.html(function(d) {
+			return "" + d.key + ": " + d.value + "";
+		});
+	svg.call(tip);
+	draw(width, height)
+}
+
+function draw(width, height) {
+	d3.json("/donate/data/year", function(err, data) {
+		var xscale = d3.scale.ordinal().rangeRoundBands([0, width], .1);
+		xscale.domain(data.map(function(d) { return d.key; }));
+                var yscale = d3.scale.linear().range([height, 0]);
+		yscale.domain([0, d3.max(data, function(d) { return d.value; })]);
+		var key = function(d) { return d.key; };
+
+		var xaxis = d3.svg.axis()
+			.scale(xscale)
+			.orient("bottom");
+		var yaxis = d3.svg.axis()
+			.scale(yscale)
+			.orient("left");
+
+		svg.append("g")
+			.attr("class", "x axis")
+			.attr("transform", "translate(0, " + height + ")")
+			.call(xaxis);
+		svg.append("g")
+			.attr("class", "y axis")
+			.call(yaxis)
+			.append("text")
+			.attr("transform", "rotate(-90)")
+			.attr("y", 6)
+			.attr("dy", ".71em")
+			.style("text-anchor", "end");
+
+		svg.selectAll("rect")
+			.data(data, key)
+			.enter()
+			.append("rect")
+			.attr("class", "bar")
+			.attr("x", function(d) {
+				return xscale(d.key);
+			})
+			.attr("width", xscale.rangeBand())
+			.attr("y", function(d) {
+				return yscale(d.value);
+			})
+			.attr("height", function(d) {
+				return height - yscale(d.value);
+			})
+			.attr("fill", function(d) {
+				return "#00ae18";
+			})
+			.on("mouseover", tip.show)
+			.on("mouseout", tip.hide)
+			
+	});	
+};
+
+function redraw() {
+	width = document.getElementById('yearchart').offsetWidth - 40 -30;
+	height = (width / 2) - 20 - 30;
+	d3.select('#yearchart').select('svg').remove();
+	setup(width, height);
+}
+
+var throttleTimer;
+function throttle() {
+	  window.clearTimeout(throttleTimer);
+	      throttleTimer = window.setTimeout(function() {
+		            redraw();
+			        }, 200);
+}