Here are 8 hours of my screen recordings using GPT-5 within Cursor. It just has music in the background, no talking. GPT-5 is now my daily driver and I haven’t switched since. It is accurate, does what I ask and doesn’t veer from the plan. My prompts are long with it, but I prefer ensuring it knows exactly what I am needing.
The work in these videos are taking place in a TypeScript frontend + backend monorepo with only 1 Cursor instance. I am creating an application which will be a CRM system, but the plan is that everything you can do in the UI, you will be able to do in the Chat interface like an agent.
I hope these videos help people and give them some examples of how to prompt GPT-5 as it is abit different to Claude models. There are the previous 17 parts which use exclusively Claude models. You can also find these on the channel.
Also thank you to the Cursor team for providing such an incredible experience which makes it so fun to create software! Keep going strong! ![]()
![]()
Frontend: React 19 SPA with Vite and MUI
Backend: Node.js Express with Zod, Prisma
P.S. I am currently unemployed, so if you are a team who use Cursor and need another engineer, please get in touch! I am UK based but I am happy to relocate or work remote. Thank you!
Part 18
In this episode, I implement the [task] entity into my application do some refactoring, ensuring [time] must now linked to a task and also tasks show under projects. This contains full implementation across backend and frontend.
https://www.youtube.com/watch?v=_n7ASmpVVqU
Part 19
In this episode, I am implementing the new gpt-5, gpt-5-mini and gpt-5-nano models in to the application. I have made the choice to just support these 3 models going forward when I do decide to release the software (either open source or sell - I am not sure on this yet.)
https://www.youtube.com/watch?v=L2Ys-jvtRPg
Part 20
In this episode, I was refactoring how I’m using the OpenAI npm package. For a prototype MVP I am trying to complete as quickly as possibly, it has too many abstractions. So the goal was to simplify. We did some package research and also documentation into md files.
https://www.youtube.com/watch?v=Em0AbdZwi4o
Part 21
This part was working on fixing a bug where the link to the OpenAI call wasn’t showing correctly from the user and assistant messages on the frontend. Alot of refactoring and fixing bugs in this episode, which is always fun and satisfiying to do!
https://www.youtube.com/watch?v=1hyO4wnATjM
Part 22
This episode was very cool. I needed to start adding GPT-5 reasoning functionality to my application, so I had Cursor go off and do some research on the [openai] npm package so he know exactly what he needed to have in context to answer the questions.
We also fixed a security issue where secrets could be shown back on the UI, when they should only be allowed to be edited and only ever decrypted for backend purposes.
https://www.youtube.com/watch?v=515OjKiu71Q
Part 23
This episode was also very cool. We implemented reasoning summary down to the react application. I was very impressed with this work by GPT-5.
https://www.youtube.com/watch?v=WeizYA7_v5U
Part 24
More package research. We are figuring out how we pass the encrypted reasoning items back in the OpenAI chain as we are not using stateful requests (not providing previous id, as eventually we want to do alot of context manipulation).
https://www.youtube.com/watch?v=FfFQ4jbYxUg
Part 25
More work on passing back the reasoning tokens back to OpenAI when we make the API call. This was completed in this episode.
https://www.youtube.com/watch?v=f1c4uCFPANk
Part 26
In this episode, we added the ability for a chat to be a “project chat”. We added a nullable column to the chat table which was called project_id. If the chat has a project_id, it will be scoped to all related items from that project such as tasks, clients, contracts, notes, tag which will be available in the context ready for when we add tools, or if they want to simply have a conversation to see where things are.
https://www.youtube.com/watch?v=1D5tUPXH1Vs
Part 27
Finally getting where I want to be! We are now working on injecting project based context into the project chats. It seems to be working very well so far. I passed Cursor details from the GPT-5 prompting guide, we made some adjustments.
https://www.youtube.com/watch?v=AP48wrPWIGI
Here are the package.json files for both frontend and backend so you get a feel of the technology I’m working with.
Here is the frontend package.json:
{
"name": "frontend",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint .",
"preview": "vite preview"
},
"dependencies": {
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
"@fontsource/roboto": "^5.2.6",
"@mui/icons-material": "^7.1.1",
"@mui/lab": "^7.0.0-beta.13",
"@mui/material": "^7.1.1",
"@mui/x-data-grid": "^8.5.3",
"@mui/x-date-pickers": "^8.9.2",
"@types/react-router-dom": "^5.3.3",
"@types/react-syntax-highlighter": "^15.5.13",
"dayjs": "^1.11.13",
"prism-react-renderer": "^2.4.1",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-markdown": "^10.1.0",
"react-router-dom": "^7.6.2",
"react-syntax-highlighter": "^15.6.1",
"rehype-highlight": "^7.0.2",
"remark-gfm": "^4.0.1",
"socket.io-client": "^4.8.1"
},
"devDependencies": {
"@eslint/js": "^9.25.0",
"@types/react": "^19.1.2",
"@types/react-dom": "^19.1.2",
"@vitejs/plugin-react": "^4.4.1",
"eslint": "^9.25.0",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.19",
"globals": "^16.0.0",
"typescript": "~5.8.3",
"typescript-eslint": "^8.30.1",
"vite": "^6.3.5"
}
}
Here is the backend package.json:
{
"name": "backend",
"version": "1.0.0",
"description": "TypeScript Express API Server",
"license": "ISC",
"author": "",
"type": "commonjs",
"main": "dist/index.js",
"scripts": {
"build": "tsc",
"start": "node dist/index.js",
"dev": "tsx watch src/index.ts",
"dev:nodemon": "nodemon --exec tsx src/index.ts",
"clean": "rm -rf dist",
"type-check": "tsc --noEmit",
"lint": "echo 'Linting not configured yet'",
"test": "echo \"Error: no test specified\" && exit 1",
"db:pull": "prisma db pull",
"db:generate": "prisma generate",
"db:studio": "prisma studio"
},
"keywords": [
"express",
"typescript",
"api",
"backend"
],
"dependencies": {
"@prisma/client": "^6.11.0",
"@types/cookie-parser": "^1.4.9",
"@types/jsonwebtoken": "^9.0.10",
"argon2": "^0.43.0",
"cookie-parser": "^1.4.7",
"cors": "^2.8.5",
"dotenv": "^17.0.1",
"express": "^5.1.0",
"helmet": "^8.1.0",
"jsonwebtoken": "^9.0.2",
"openai": "^5.12.2",
"prisma": "^6.11.0",
"socket.io": "^4.8.1",
"zod": "^3.25.67"
},
"devDependencies": {
"@types/cors": "^2.8.19",
"@types/express": "^5.0.3",
"@types/node": "^24.0.10",
"concurrently": "^9.2.0",
"nodemon": "^3.1.10",
"ts-node": "^10.9.2",
"tsx": "^4.20.3",
"typescript": "^5.8.3"
},
"engines": {
"node": ">=18.0.0"
}
}