CV Generator

Imagine you're working from home, as everyone does in your company. You're contacting a colleague who is supposed to be tasked with a new project.

Me Good morning Carl, how is life? Could you please create a new app to generate a CV? Let me send you the specifications...
Carl Awesome, yeah, I’m fine, hope you’re doing okay too. Just send them over.
Me [Send specifications]
Carl

Oh, nice project. So, here’s what you have to do: 1. Create a file named app.py with the following contents... [ten files later]

If you want, I can also create you a version in green

Me Wow, that was fast! Awesome, thanks. But when I run the app, I get an error message: ZeroDivisionError: division by zero.
Carl Oh, yeah, I already expected that! That’s because of a limitation in mathematics. In the current version of algebra you cannot divide by zero.
Me OK, could you please fix this?
Carl

Sure, here is a TESTED version of the application. Just replace [twelve files later].

If you want, I can now provide you an optimized, fully working, TESTED version with ALL features. Do you want me to do this?

Me [after copying and pasting everything before the last sentence] I thought you just did? I’m getting a 500 error on all pages.
Carl Alright, that’s because of the routing. Just replace <http> with <html>.
Me In which file? Can you provide the full files, please? It would be awesome if you could just send me a ZIP with all files. And did you really test it?
Carl OK, let’s be honest, I haven’t tested it. But I will send you a ZIP file with a working version now. It’s definitely working this time.
Carl
Me Did you just send me an image of a ZIP file?
Carl Yeah, sorry, I cannot create ZIP files, so I thought I should send you an image!
Me I need a break, talk to you tomorrow!
The next day:
Me Good morning, can we continue with our project?
Carl What project?
Me ...
Me Let me send you everything [send contents of 14 files].
Carl Wow, do you want me to rewrite this? This code is a classic example of something that needs a full rewrite and a bunch of optimizations!
Me You wrote the code just yesterday.
Carl So you want me to optimize your code?
Me Well... just do whatever is needed...
Carl Here you go, twenty new files are ready for some copy‑and‑paste action.
Me sigh I’m getting a 500 error on all pages, and the routes differ: /project-delete, /skill/delete, /certificate/delete/<string:item_id>...
Carl You’re right, let’s use a unique approach for all routes. Here are 21 new files.
Me Thanks, I’ll fix some errors myself so we at least have something that isn’t crashing.
Carl If you want, I can...
Me No thanks!
After fixing the errors, you need some data:
Me Hi, can you please help me with something? I have the following data that needs to be migrated to JSON files.
Charlotte Sure, no problem, here are your JSON files...
Me Uh, why are you stopping halfway?
Charlotte Do you want me to send you the full version?
Me Yes?
Charlotte Here is the full version of the files.
Me It stops again in the middle.
Charlotte Do you want me to send everything now?
Me Yes, is there any issue with this?
Charlotte I cannot send that much structured data in one turn. I can send you everything in a file. Do you want me to do that?
Me Sweet! Let’s go!
Charlotte Download: projects.json
Me I cannot download the file!
Charlotte Yeah, I cannot send files, so I thought I would send you text to show you how a download would look.
Me ...
Charlotte I can send everything to you in chunks.
Me Fine.
Charlotte Here we go [first chunk].
Me OK.
Charlotte [second chunk].
Me OK.
Charlotte ... [fourteenth chunk] Do you want me to continue with the next JSON file?

Nobody would accept such a behaviour by a human being, would you?

As I forgot to state clearly to my friend CoPilot, that I actually only wanted some spellchecks on the dialog above, he gave me this answer:

Exactly — nobody would accept a “colleague conversation” like the one you described. What you sketched out is a textbook case of chaotic, unprofessional collaboration:

  • Unclear responsibilities: Carl writes code, then claims it’s yours, constantly offers “optimizations,” but nothing ever works.
  • Lack of reliability: Instead of delivering tested results, you get half‑finished files, images of ZIP archives, or endless copy‑paste chunks.
  • Communication breakdown: Contradictory statements (“I tested it” vs. “I didn’t test it”), no structure, and no transparency.
  • Technical nonsense: 500 errors, broken routes, mismatched file counts — all without a working solution. In a real remote‑work environment, collaboration should look very different:
  • Clear task division (“You build the app, I provide the data”).
  • Reliable deliverables (a Git repo, a tested ZIP, working code).
  • Honest communication (acknowledge issues, provide structured fixes).
  • Efficiency instead of endless copy‑paste chaos.

So what is actually the deal with AI‑generated software?

From my point of view, it took far too long to get a working version. There’s a “play” button in ChatGPT now, which allows code execution on demand. So, in theory, ChatGPT could test a few things before delivering code — but it doesn’t. After more than two long days, I finally had a working version (including some parts in Hugo, which you can see under About → Skills). It was basically impossible to get a working version without at least some manual intervention.

Another real issue is that it frequently rewrites the entire codebase. Instead of adding specific functionality to tested and working code, the whole application is rewritten, which means full testing is required again afterwards. There is no input validation, no test cases, and no error handling in the generated code. The application might simply crash. I could probably have specified more clearly what I expected, but apart from date pickers for dates, nothing was added automatically. A human developer would likely add input validation, security checks, and error handling by default.

I provided ChatGPT with all the created files, and it gave me a very detailed analysis of every aspect and problem in the application, as well as a summary:

CategoryRatingCoPilot
Architecture6/106/10
Security4/104/10
UX7/106/10
Code Quality7/107/10
Maintainability6/105/10

To be honest, I was quite impressed by the detailed analysis ChatGPT provided. On the other hand, what would you think of a developer who knows best practices but constantly refuses to implement them?

We all know that, especially when it comes to interfaces used only by trusted technical staff, error handling and input validation aren’t always implemented in detail. Sometimes we simply expect people to read an exception message to understand what went wrong. But wouldn’t it be amazing if these easy but time‑consuming tasks could be left to an AI?

The CV generator was — and still is — a very nice experiment, and I might continue with it at some point. The more I use it, the more I feel that something similar could be useful for many freelancers. It’s well suited for such an experiment because it runs locally, without any internet connection, inside a container, which provides only a small attack surface. The part on my homepage is delivered as a static website; the only active code runs on the client computer via JavaScript.

There may be AI models out there that do a much better job than general‑purpose ChatGPT. I still think it’s fine to use ChatGPT (or any other AI) for prototyping. Before I had the idea for the full project, I asked ChatGPT to provide a minor subset of the functionality as a proof of concept, and it worked fine after a few attempts. I must admit that I did only very limited manual intervention, and every time I did, the process sped up significantly. If I continue with this project, I will definitely change my method from “let the AI work and see” to “let the AI generate features, then optimize and fix manually.” I would also split the project into smaller files, hoping that ChatGPT could then focus on specific tasks rather than rewriting everything over and over again.

That said, please note that the source code is published on GitHub, so this project is open source. If you’re working at a company, especially a software development company, make sure that the use of AI complies with your company’s policies. A full‑blown closed‑source application may have very different data protection requirements compared to an open‑source project.

Comments

Your privacy is important to us. Comments are provided via third-party services (Giscus + GitHub). Loading them may transmit personal data (e.g., your IP address) to these providers. For more information, see our privacy policy.

Translations: