The error is with the call:
glVertexAttribPointer(0, 3, GL_FLAT, false, 0, 0);
This call is generating an OpenGL error (and its effect is therefore ignored), because you pass the invalid constant `GL_FLAT`. It should be `GL_FLOAT`.
This causes glDrawArrays() to access undefined memory (because the vertex buffer has not been specified as the vertex attribute source).
EDIT:
Besides that:
glEnableVertexAttribArray(0);
can be executed within the VAO binding just once in start(). Vertex array enable state is part of the VAO and you don't have to enable/disable constantly.