Hello Google AI / Gemini team,
I would like to share technical feedback after testing an application generated and refined in Google AI Studio with Gemini.
Overall, my experience was positive. Gemini was able to generate a useful React/Vite application structure, respond to corrections, and improve the project iteratively. The model did not perform badly — in fact, it showed strong potential as a developer assistant, especially when guided with specific technical feedback.
During testing, I identified several issues and applied fixes that made the application work properly in my environment.
1. PDF export compatibility issue
The generated code used modern CSS color functions such as `oklab` / `oklch`. This caused the PDF generation process to fail with an error similar to:
`PDF Generation Error: Attempting to parse an unsupported color function “oklab”`
Fix applied:
I replaced unsupported CSS color functions with standard HEX / RGB / RGBA values. After this change, the PDF export workflow became more compatible with the PDF generation tool.
2. Vite / React / TypeScript build issue
The generated project also produced a Vite transform error in `src/App.tsx`, including an invalid replacement character:
`/app/applet/src/App.tsx:136:2: ERROR: Unexpected “�”`
Fix applied:
I removed the invalid character, cleaned the affected section of `App.tsx`, resolved the file conflict, and rebuilt the project.
3. File download functionality
The application was able to generate file content, but the download functionality did not work reliably at first.
Fix applied:
I added a browser-based file download helper using `Blob`, `URL.createObjectURL`, a temporary `` element with the `download` attribute, and delayed cleanup with `URL.revokeObjectURL()`.
Example of the corrected helper:
```ts
export const downloadFile = ({ filename, content, mimeType = “text/plain;charset=utf-8” }) => {
const blob = content instanceof Blob ? content : new Blob([content], { type: mimeType });
const url = URL.createObjectURL(blob);
const link = document.createElement(“a”);
link.href = url;
link.download = filename;
link.style.display = “none”;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
setTimeout(() => {
URL.revokeObjectURL(url);
}, 1000);
};