AI prompts
base on # Basecamp repo - Great Rails code
If you like to study well-written code in order to learn, there is no better repository to study for learning Rails than Basecamp and Hey. As you browse this repo, notice that files with ".rb" have content and files that end in "-rb" have no content. The empty files are placeholders to give you a sense for other models that exist.
The Basecamp code came primarily from a series of videos DHH did many years ago on [Writing Software Well](https://m.signalvnoise.com/on-writing-software-well/). Here are all the videos:
[![](https://img.youtube.com/vi/wXaC0YvDgIo/2.jpg)](https://www.youtube.com/watch?v=wXaC0YvDgIo)
Episode #1 - Pilot Episode
[![](https://img.youtube.com/vi/M3JPTOTqsnE/2.jpg)](https://www.youtube.com/watch?v=M3JPTOTqsnE)
Episode #2 - Using callbacks to manage auxiliary complexity
[![](https://img.youtube.com/vi/lEUkarkROv0/2.jpg)](https://www.youtube.com/watch?v=lEUkarkROv0)
Episode #3 - Using globals when the price is right
[![](https://img.youtube.com/vi/hkmrfjex7jI/2.jpg)](https://www.youtube.com/watch?v=hkmrfjex7jI)
Episode #4 - Not every model is backed by a database
[![](https://img.youtube.com/vi/5hN6OZDyQtk/2.jpg)](https://www.youtube.com/watch?v=5hN6OZDyQtk)
Episode #5 - Testing without test damage or excessive isolation
[![](https://img.youtube.com/vi/AoxoPfilKqE/2.jpg)](https://www.youtube.com/watch?v=AoxoPfilKqE)
Episode #6 - Actually deleting data, not just pretending to
[![](https://img.youtube.com/vi/Yd3j3ZEx6DU/2.jpg)](https://www.youtube.com/watch?v=Yd3j3ZEx6DU)
Episode #7 - Move the specifics down as far as it'll go when evolving your codebase
This spirit of sharing was continued by Jorge Manrubia in a series of articles title [Code I Like](https://dev.37signals.com/series/code-i-like/). All of the Hey reference code came from Jorge's articles.
It's worth watching and reading all of the above, if you want to know more. But I've found it helpful to have all the code samples organized into a repo to help me piece together how the team thinks about the overall code organization and domain model.
", Assign "at most 3 tags" to the expected json: {"id":"6740","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"