diff --git a/src/helpers.cr b/src/helpers.cr
index 7aefe615..deb46080 100644
--- a/src/helpers.cr
+++ b/src/helpers.cr
@@ -1,3 +1,18 @@
+macro add_mapping(mapping)
+  def initialize({{*mapping.keys.map { |id| "@#{id}".id }}})
+  end
+
+  def to_a
+    return [{{*mapping.keys.map { |id| "@#{id}".id }}}]
+  end
+
+  DB.mapping({{mapping}})
+end
+
+macro templated(filename)
+  render "src/views/#{{{filename}}}.ecr", "src/views/layout.ecr"
+end
+
 class Video
   module HTTPParamConverter
     def self.from_rs(rs)
@@ -5,24 +20,7 @@ class Video
     end
   end
 
-  def initialize(id, info, updated, title, views, likes, dislikes, wilson_score, published, description)
-    @id = id
-    @info = info
-    @updated = updated
-    @title = title
-    @views = views
-    @likes = likes
-    @dislikes = dislikes
-    @wilson_score = wilson_score
-    @published = published
-    @description = description
-  end
-
-  def to_a
-    return [@id, @info, @updated, @title, @views, @likes, @dislikes, @wilson_score, @published, @description]
-  end
-
-  DB.mapping({
+  add_mapping({
     id:   String,
     info: {
       type:      HTTP::Params,
diff --git a/src/invidious.cr b/src/invidious.cr
index 126820fe..545b3fe7 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -1,4 +1,4 @@
-# "Invidious" (which indexes popular video sites)
+# "Invidious" (which is what YouTube should be)
 # Copyright (C) 2018  Omar Roth
 #
 # This program is free software: you can redistribute it and/or modify