diff --git a/fggl/CMakeLists.txt b/fggl/CMakeLists.txt
index 838c36e82ed2470c7e8da7e3c08bd73687564eba..95c97ae9920451608b3cbbd16e2800b5c43b274b 100644
--- a/fggl/CMakeLists.txt
+++ b/fggl/CMakeLists.txt
@@ -2,7 +2,7 @@ configure_file(FgglConfig.h.in FgglConfig.h)
 
 find_program(CLANG_TIDY_FOUND clang-tidy)
 if ( CLANG_TIDY_FOUND )
-	set(CMAKE_CXX_CLANG_TIDY clang-tidy -checks=*,-llvmlibc-*,-fuchsia-*,-cppcoreguidelines-*,-android-*,-llvm-*,-altera-*)
+	set(CMAKE_CXX_CLANG_TIDY clang-tidy -checks=*,-llvmlibc-*,-fuchsia-*,-cppcoreguidelines-*,-android-*,-llvm-*,-altera-*,-modernize-use-trailing-return-type)
 endif()
 
 add_library(fggl fggl.cpp
diff --git a/fggl/data/model.cpp b/fggl/data/model.cpp
index 6c0a08abc069e3b2a92525af32ed4274b41692a0..fcb96eb76147ef190282dd7232407fe34106bb05 100644
--- a/fggl/data/model.cpp
+++ b/fggl/data/model.cpp
@@ -70,9 +70,3 @@ void Mesh::removeDups() {
 	m_index.shrink_to_fit();
 }
 
-Model::Model() {
-}
-
-Model::~Model() {
-}
-
diff --git a/fggl/data/model.hpp b/fggl/data/model.hpp
index bc90ed10d0c934fcba8c89bc3a45c96876e807cd..88ef649b973f461330f34d9922e8a48ca1cbd797 100644
--- a/fggl/data/model.hpp
+++ b/fggl/data/model.hpp
@@ -108,8 +108,8 @@ namespace fggl::data {
 
 	class Model {
 		public:
-			Model();
-			~Model();
+			Model() = default;
+			~Model() = default;
 
 			inline void append(const Mesh& mesh) {
 				m_meshes.push_back( mesh );
diff --git a/fggl/data/procedural.cpp b/fggl/data/procedural.cpp
index 0f65c60ef702e0140f33916ef6056643a61fef67..2df2b1720cfbc5d85ac93bededcf03a2152bfecc 100644
--- a/fggl/data/procedural.cpp
+++ b/fggl/data/procedural.cpp
@@ -23,7 +23,7 @@ static void computeNormals( fggl::data::Mesh& mesh, const int* idx, const int* c
 	// FIXME this will touch any vertex that appears in idx more than once mutliple times...
 	for ( int i=0; i<nPoints; i++ ) {
 		auto& vertex = mesh.vertex( colIdx[ idx[i] ] );
-		vertex.normal = glm::vec3(0.0f);
+		vertex.normal = glm::vec3(0.0F);
 	}
 
 	// each vertex normal should be the sum of the triangles it's part of.
@@ -53,7 +53,7 @@ static void computeNormalsDirect( fggl::data::Mesh& mesh, const int* colIdx, int
 	// we're assuming all the normals are zero...
 	for ( int i=0; i<nPoints; i++ ) {
 		auto& vertex = mesh.vertex( colIdx[i] );
-		vertex.normal = glm::vec3(0.0f);
+		vertex.normal = glm::vec3(0.0F);
 	}
 
 	// We're assuming each vertex appears only once (because we're not indexed)
@@ -71,9 +71,9 @@ static void computeNormalsDirect( fggl::data::Mesh& mesh, const int* colIdx, int
 
 fggl::data::Mesh fggl::data::make_triangle() {
     constexpr fggl::math::vec3 pos[]{
-            {-0.5f, -0.5f, 0.0f},
-            {0.5f,  -0.5f, 0.0f},
-            {0.0f,  0.5f,  0.0f}
+            {-0.5F, -0.5F, 0.0F},
+            {0.5F,  -0.5F, 0.0F},
+            {0.0F,  0.5F,  0.0F}
     };
 
     // add points
@@ -81,8 +81,8 @@ fggl::data::Mesh fggl::data::make_triangle() {
     for (auto po : pos) {
         Vertex vert{};
         vert.posititon = po;
-	vert.normal = glm::vec3(0.0f, 0.0f, 0.0f);
-        vert.colour = fggl::math::vec3(1.0f, 1.0f, 1.0f);
+	vert.normal = glm::vec3(0.0F, 0.0F, 0.0F);
+        vert.colour = fggl::math::vec3(1.0F, 1.0F, 1.0F);
         mesh.push(vert);
     }
 
@@ -96,10 +96,10 @@ fggl::data::Mesh fggl::data::make_triangle() {
 
 fggl::data::Mesh fggl::data::make_quad_xy() {
 	constexpr fggl::math::vec3 pos[] {
-		{-0.5f, -0.5f, 0.0f},
-		{ 0.5f, -0.5f, 0.0f},
-		{ 0.5f,  0.5f, 0.0f},
-		{-0.5f,  0.5f, 0.0f}
+		{-0.5F, -0.5F, 0.0F},
+		{ 0.5F, -0.5F, 0.0F},
+		{ 0.5F,  0.5F, 0.0F},
+		{-0.5F,  0.5F, 0.0F}
 	};
 	constexpr int idx[] {
 		0, 1, 3,
@@ -107,12 +107,12 @@ fggl::data::Mesh fggl::data::make_quad_xy() {
 	};
 
 	fggl::data::Mesh mesh;
-	int colIdx[4];
+	std::array<int,4> colIdx;
 	for (int i = 0; i < 4; ++i){
 		Vertex vert{};
 		vert.posititon = pos[i];
-		vert.normal = glm::vec3(0.0f, 0.0f, 0.0f);
-		vert.colour = fggl::math::vec3(1.0f, 1.0f, 1.0f);
+		vert.normal = glm::vec3(0.0F, 0.0F, 0.0F);
+		vert.colour = fggl::math::vec3(1.0F, 1.0F, 1.0F);
 		colIdx[ i ] = mesh.pushVertex(vert);
 	}
 
@@ -125,10 +125,10 @@ fggl::data::Mesh fggl::data::make_quad_xy() {
 
 fggl::data::Mesh fggl::data::make_quad_xz() {
 	constexpr fggl::math::vec3 pos[] {
-		{-0.5f, 0.0f, -0.5f},
-		{ 0.5f, 0.0f, -0.5f},
-		{ 0.5f, 0.0f,  0.5f},
-		{-0.5f, 0.0f,  0.5f}
+		{-0.5F, 0.0F, -0.5F},
+		{ 0.5F, 0.0F, -0.5F},
+		{ 0.5F, 0.0F,  0.5F},
+		{-0.5F, 0.0F,  0.5F}
 	};
 	constexpr int idx[] {
 		0, 1, 3,
@@ -140,8 +140,8 @@ fggl::data::Mesh fggl::data::make_quad_xz() {
 	for (int i = 0; i < 4; ++i){
 		Vertex vert{};
 		vert.posititon = pos[i];
-		vert.normal = glm::vec3(0.0f, 0.0f, 0.0f);
-		vert.colour = fggl::math::vec3(1.0f, 1.0f, 1.0f);
+		vert.normal = glm::vec3(0.0F, 0.0F, 0.0F);
+		vert.colour = fggl::math::vec3(1.0F, 1.0F, 1.0F);
 		colIdx[ i ] = mesh.pushVertex(vert);
 	}
 
@@ -153,7 +153,7 @@ fggl::data::Mesh fggl::data::make_quad_xz() {
 }
 
 
-constexpr float HALF_PI = M_PI / 2.0f;
+constexpr float HALF_PI = M_PI / 2.0F;
 static void populateMesh(fggl::data::Mesh& mesh, const fggl::math::mat4 transform, 
 		          int nIdx, const fggl::math::vec3* pos, const int* idx ) {
 	int colIdx[nIdx];
@@ -164,8 +164,8 @@ static void populateMesh(fggl::data::Mesh& mesh, const fggl::math::mat4 transfor
 
 		Vertex vert{};
 		vert.posititon = rawPos;
-		vert.normal = glm::vec3(0.0f, 0.0f, 0.0f);
-		vert.colour = fggl::math::vec3(1.0f, 1.0f, 1.0f);
+		vert.normal = glm::vec3(0.0F, 0.0F, 0.0F);
+		vert.colour = fggl::math::vec3(1.0F, 1.0F, 1.0F);
 		colIdx[ i ] = mesh.pushVertex( vert );
 		mesh.pushIndex( colIdx[i] );
 	}
diff --git a/fggl/debug/debug.cpp b/fggl/debug/debug.cpp
index 9e825fdb51d01721fd078d31d93328e415b76df1..f5955104489c55f6b3fd83d44f2461c6f044e1f1 100644
--- a/fggl/debug/debug.cpp
+++ b/fggl/debug/debug.cpp
@@ -7,14 +7,14 @@
 using fggl::gfx::Window;
 using fggl::debug::DebugUI;
 
-DebugUI::DebugUI(std::shared_ptr<Window> win) : m_visible(false) {
+DebugUI::DebugUI(std::shared_ptr<Window>& win) : m_visible(false) {
 	IMGUI_CHECKVERSION();
 	ImGui::CreateContext();
 
-    ImGuiIO& io = ImGui::GetIO();
-    io.IniFilename = nullptr;
+	ImGuiIO& io = ImGui::GetIO();
+	io.IniFilename = nullptr;
 
-    ImGui_ImplGlfw_InitForOpenGL(win->handle(), true);
+	ImGui_ImplGlfw_InitForOpenGL(win->handle(), true);
 	ImGui_ImplOpenGL3_Init("#version 130");
 }
 
@@ -32,13 +32,14 @@ void DebugUI::frameStart() {
 }
 
 void DebugUI::draw() {
-    for ( auto& [name, data] : m_windows) {
-        if ( data.m_visible ) {
-            data.m_callback( &data.m_visible );
-        }
-    }
+	for ( auto& [name, data] : m_windows) {
+		if ( data.m_visible ) {
+			data.m_callback( &data.m_visible );
+		}
+	}
 
 	ImGui::Render();
-	if ( m_visible )
+	if ( m_visible ) {
 		ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
+	}
 }
diff --git a/fggl/debug/debug.h b/fggl/debug/debug.h
index cdfb29899cbf4fbe26105febd2b55cf2ce829318..0b75b81f3113026da7684aa7b1bc510635bd0296 100644
--- a/fggl/debug/debug.h
+++ b/fggl/debug/debug.h
@@ -9,39 +9,39 @@
 
 namespace fggl::debug {
 
-    using DebugUIDraw = std::function<void(bool*)>;
+	using DebugUIDraw = std::function<void(bool*)>;
 
-    struct DebugWindow {
-        bool m_visible;
-        DebugUIDraw m_callback;
-    };
+	struct DebugWindow {
+		bool m_visible;
+		DebugUIDraw m_callback;
+	};
 
 	class DebugUI {
 		public:
-			explicit DebugUI(std::shared_ptr<gfx::Window> window);
+			explicit DebugUI(std::shared_ptr<gfx::Window>& window);
 			~DebugUI();
 
 			void frameStart();
 			void draw();
 
-            inline void addWindow(const std::string& name, DebugUIDraw window){
-                m_windows[name] = DebugWindow{
-                    .m_visible = true,
-                    .m_callback = std::move(window)
-                };
-            }
+			inline void addWindow(const std::string& name, DebugUIDraw window){
+				m_windows[name] = DebugWindow{
+					.m_visible = true,
+						.m_callback = std::move(window)
+				};
+			}
 
 			inline void visible(bool state) {
 				m_visible = state;
 			}
 
-            inline bool visible() const {
-                return m_visible;
-            }
+			inline bool visible() const {
+				return m_visible;
+			}
 
 		private:
 			bool m_visible;
-            std::unordered_map<std::string, DebugWindow> m_windows;
+			std::unordered_map<std::string, DebugWindow> m_windows;
 	};
 
 }
diff --git a/fggl/gfx/ogl/renderer.cpp b/fggl/gfx/ogl/renderer.cpp
index 1132df950a168e7bdfc684afd629a062587dc5fd..d869a6698cc214b7751287a05f1341fefb5f7252 100644
--- a/fggl/gfx/ogl/renderer.cpp
+++ b/fggl/gfx/ogl/renderer.cpp
@@ -21,8 +21,7 @@
  *   OpenGL ES for the FOSS thinkpad users who can't run anything even remotely modern
  */
  
-
-using namespace fggl::gfx;
+namespace fggl::gfx {
 
 template<typename T>
 static GLuint createArrayBuffer(std::vector<T>& vertexData) {
@@ -68,6 +67,9 @@ GlRenderToken MeshRenderer::upload(fggl::data::Mesh& mesh) {
 	return token;
 }
 
+//TODO(webpigeon): this shouldn't be hard-coded
+constexpr glm::vec3 DEFAULT_LIGHTPOS = glm::vec3(20.0F, 20.0F, 15.0F);
+
 void MeshRenderer::render(fggl::ecs3::World& ecs, ecs3::entity_t camera, float dt) {
     if ( camera == ecs::NULL_ENTITY ){
         std::cerr << "no camera" << std::endl;
@@ -88,16 +90,16 @@ void MeshRenderer::render(fggl::ecs3::World& ecs, ecs3::entity_t camera, float d
     glEnable(GL_DEPTH_TEST);
 
     // camera logic
-    const auto camTransform = ecs.get<math::Transform>(camera);
-    const auto camComp = ecs.get<gfx::Camera>(camera);
+    auto *const camTransform = ecs.get<math::Transform>(camera);
+    auto *const camComp = ecs.get<gfx::Camera>(camera);
     glm::mat4 proj = glm::perspective( camComp->fov, camComp->aspectRatio, camComp->nearPlane, camComp->farPlane);
     glm::mat4 view = glm::lookAt( camTransform->origin(), camComp->target, camTransform->up() );
 
     // lighting
-    glm::vec3 lightPos(20.0f, 20.0f, 15.0f);
+    glm::vec3 lightPos = DEFAULT_LIGHTPOS;
 
-    // TODO better performance if grouped by vao first
-    // TODO the nvidia performance presentation said I shouldn't use uniforms for large data
+    // TODO(webpigeon): better performance if grouped by vao first
+    // TODO(webpigeon): the nvidia performance presentation said I shouldn't use uniforms for large data
     for ( auto& entity : entities ) {
 	    const auto& transform = ecs.get<fggl::math::Transform>(entity);
 	    const auto& mesh = ecs.get<GlRenderToken>(entity);
@@ -114,8 +116,9 @@ void MeshRenderer::render(fggl::ecs3::World& ecs, ecs3::entity_t camera, float d
 
 	    // lighting
 	    GLint lightID = glGetUniformLocation(shader, "lightPos");
-	    if ( lightID != -1 )
+	    if ( lightID != -1 ) {
 		    glUniform3fv( lightID, 1, glm::value_ptr( lightPos ) );
+	    }
 
 	    glBindVertexArray( mesh->vao );
 
@@ -133,3 +136,4 @@ void MeshRenderer::render(fggl::ecs3::World& ecs, ecs3::entity_t camera, float d
     glBindVertexArray(0);
 }
 
+}
diff --git a/fggl/gfx/ogl/renderer.hpp b/fggl/gfx/ogl/renderer.hpp
index 2e900cb4df7297d2f1444ed20c5b986d7d942164..fcbdb8d56c6125f14a72487bc1cb5ca0399358ca 100644
--- a/fggl/gfx/ogl/renderer.hpp
+++ b/fggl/gfx/ogl/renderer.hpp
@@ -9,19 +9,19 @@
 
 namespace fggl::gfx {
 
-    enum GlRenderType {
-        triangles = GL_TRIANGLES, trinagle_strip = GL_TRIANGLE_STRIP
-    };
+	enum GlRenderType {
+		triangles = GL_TRIANGLES, trinagle_strip = GL_TRIANGLE_STRIP
+	};
 
 	struct GlRenderToken {
-        constexpr static const char name[] = "RenderToken";
+		constexpr static const char name[] = "RenderToken";
 		GLuint vao;
 		GLuint buffs[2];
 		GLuint idxOffset;
-		GLuint idxSize;
+		GLsizei idxSize;
 		GLuint pipeline;
-        GLuint restartVertex;
-        GlRenderType renderType = triangles;
+		GLuint restartVertex;
+		GlRenderType renderType = triangles;
 	};
 
 	class GlMeshRenderer {
diff --git a/fggl/gfx/ogl/shader.cpp b/fggl/gfx/ogl/shader.cpp
index d9c0da50d4373e5e724d270d6ef32d2055765606..82f1aa6f3528951400796880824e53751cb91bb6 100644
--- a/fggl/gfx/ogl/shader.cpp
+++ b/fggl/gfx/ogl/shader.cpp
@@ -187,7 +187,7 @@ bool fggl::data::fggl_deserialize(std::filesystem::path &data, fggl::gfx::Binary
 		return false;
 	}
 
-	int rsize = std::fread( &out->format, sizeof(GLenum), 1, f);
+	auto rsize = std::fread( &out->format, sizeof(GLenum), 1, f);
 	if ( rsize != 1 ) {
 		std::cerr << "invalid read of type";
 		std::fclose(f);
@@ -203,7 +203,7 @@ bool fggl::data::fggl_deserialize(std::filesystem::path &data, fggl::gfx::Binary
 	}
 
 	out->data = std::malloc(out->size);
-	int readSize = std::fread( out->data, out->size, 1, f );
+	auto readSize = std::fread( out->data, out->size, 1, f );
 
 	auto result = true;
 	if ( readSize != 1 ) {
@@ -213,7 +213,7 @@ bool fggl::data::fggl_deserialize(std::filesystem::path &data, fggl::gfx::Binary
 	}
 
 	std::fclose(f);
-	return true;
+	return result;
 }
 
 #include <iostream>