diff --git a/Gruntfile.js b/Gruntfile.js
index 14988e63615c52d8745c036477aa310de36839e8..95fa132915f06406f0ef6c89f3f8577d8615c32f 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -1,4 +1,5 @@
-const { readdirSync } = require("fs");
+const readdirp = require("readdirp");
+const { extname } = require("path");
 
 module.exports = grunt => {
   const PUBLIC_HOST = process.env.PUBLIC_HOST || "localhost";
@@ -28,7 +29,7 @@ module.exports = grunt => {
         files: ["Gruntfile.js"]
       },
       presentations: {
-        files: "src/**/*.md",
+        files: "src/**/*",
         tasks: [],
         options: {
           debounceDelay: 1000,
@@ -78,6 +79,12 @@ module.exports = grunt => {
         cwd: "node_modules/reveal.js/.",
         src: revealJsSources,
         dest: "dist/reveal.js/"
+      },
+      sources: {
+        expand: true,
+        cwd: "src/",
+        src: ["**/*", "!**/.*", "!**/*.md"],
+        dest: "dist/"
       }
     },
 
@@ -94,9 +101,14 @@ module.exports = grunt => {
   grunt.registerTask("serve", ["http-server", "build:dev", "watcher"]);
 
   grunt.registerTask("build:revealjs", ["copy:revealjs"]);
+  grunt.registerTask("build:sources", ["copy:sources"]);
 
   grunt.registerTask("build", env =>
-    grunt.task.run(["build:revealjs", `build:pres:${env || "prod"}`])
+    grunt.task.run([
+      "build:revealjs",
+      "build:sources",
+      `build:pres:${env || "prod"}`
+    ])
   );
 
   const enqueueBuilds = (paths, env) =>
@@ -109,9 +121,16 @@ module.exports = grunt => {
         )
     );
 
-  grunt.registerTask("build:pres", env =>
-    enqueueBuilds(readdirSync("src/"), env)
-  );
+  grunt.registerTask("build:pres", function(env) {
+    const done = this.async();
+    readdirp
+      .promise("src/", { fileFilter: "*.md" })
+      .then(entries => enqueueBuilds(entries.map(entry => entry.path), env))
+      .then(done, err => {
+        grunt.log.error(err);
+        done(false);
+      });
+  });
 
   grunt.event.removeAllListeners("chokidar");
   grunt.event.on("chokidar", function(_, filepath, target) {
diff --git a/package.json b/package.json
index 1dac4f1311688f4ccd5dfd45755f69c13b91d31f..502d3faf66ab5e8da1cca30340e6a0e7ed2a43a6 100644
--- a/package.json
+++ b/package.json
@@ -26,6 +26,7 @@
     "grunt-exec": "^3.0.0",
     "grunt-http-server": "^2.1.0",
     "grunt-watcher": "^1.0.0",
+    "readdirp": "^3.2.0",
     "reveal.js": "git+https://gitlab.irstea.fr/guillaume.perreal/reveal.js.git#irstea"
   },
   "devDependencies": {