Basic guide for organising project data
Ongoing, suggestions welcome.
Related project:
https://www.ilovephilosophy.com/t/box-in-a-box/84705/11
(WARNING: SWEARING)
Create local folder structure (without example files):
project_zeus/ │ ├── AI │ ├── hardware_resources.txt │ ├── initial_prompt.txt │ └── project_prompt.txt │ ├── docs │ ├── Project Zeus.doc │ ├── Project Zeus.pdf │ ├── Cost Estimate.xls │ └── Standard Spiel for Dim Corporate Types v2.2.docx │ ├── images │ ├── haha_you_fanny.jpg │ └── grok_initial_prompt_response.png │ ├── mess │ └── mess.txt │ └── project │ ├── logic │ ├── file_v1.0 │ ├── file_v11.4 │ └── file_v4.0 │ ├── outline │ ├── file_v1.0 │ ├── file_v11.4 │ └── file_v4.0 │ ├── phase1 │ ├── file_v1.0 │ ├── file_v11.4 │ └── file_v4.0 │ ├── phase2 │ ├── file_v1.0 │ ├── file_v11.4 │ └── file_v4.0 │ └── phase3 ├── file_v1.0 ├── file_v11.4 └── file_v4.0
Descriptions:
project_zeusTop level folder for this project.
AIFor AI prompts and useful generated output.
docsFor formatted documents somehow related to the project.
imagesFor images somehow related to the project and screen captures.
messCan also be called
tmportempor whatever you like, bet mine gets messy.., but a mess is better than nothing when grabbing stuff.
I use
mess.txtas a filename index.
Further folders can be added as needed, but I wouldn’t get carried away. Try to keep them simple and relevant. For example, you might want to also have a
media, orreadyfolder in the project root folder, or something like that.
projectThis is your actual project (story so far) folder. Approved (at the time) stuff only in here. You can use any data format you like, but for written stuff I pretty much always just write plain ASCII text documents, there is no heavy reliance on specific software to view the data. But regardless of formatting, everything must be versioned.
You may need other folders than
logicandoutlinedepending on the project, I just find those work well for most stuff I do.The
phase..folders should have subfolders relevant to that phase. For example:├── phase1 │ ├── 1_prepare_environment │ ├── 2_test_components │ ├── 3_full_testing │ └── ideas
Versioning:
Versioning should be applied to everything inside the
projectfolder, right in the filename. I just use<filename>_v1.4, _v2.0..and so forth, it’s ridiculously easy to keep track of visually, and I can see that it’s versioning from thev, but as long as you understand your own versioning method, you can use whatever you want.The easiest possible route to versioning is to just have it follow the current phase of the project. E.g.
3.4for phase 3, 4th step, but this is not always suitable, it depends..You can upgrade your versioning system to more detail mid project without (any?) ill effects, as long as you are just adding more detail, i.e.
v7.47- phase 7, 4th step, 7th revision.Tacking on versions to your files in the project folder soon becomes automatic, and you will easily spot when it’s not there. All good habits.
Versioning checker
niall@desktop ~/W/project_zeus/project> nano validate_v1.0
#!/bin/bash
echo
echo "Unversioned files:"
echo "------------------"
find . -type f ! -name '*v[0-9]*.[0-9]*'
echo
echo "Done."
chmod +x validate_v1.0
niall@desktop ~/W/p/project> ./validate_v1.0
Unversioned files:
------------------
./logic/no_decimal_place_v1.txt
./phase1/ideas/unversioned_file.txt
./phase2/improperly_versioned2.2
Done.
Searching:
Finding stuff
In the same folder:
niall@desktop ~/W/project_zeus/images> find *haha* haha_you_fanny.jpg niall@desktop ~/W/project_zeus/images> find *grok* grok_initial_prompt_response.png niall@desktop ~/W/project_zeus/images> find *response* different_response.png grok_initial_prompt_response.png niall@desktop ~/W/project_zeus/images>I pretty much manually rename everything project related that I grab for this reason.
You can do it this way..
Finding all relevant project stuff (from the command line):
niall@desktop ~/W/project_zeus> find . -name "*grok*" ./images/grok_initial_prompt_response.png niall@desktop ~/W/project_zeus> find . -name "*testing*" ./project/phase1/3_full_testing niall@desktop ~/W/project_zeus> find . -name "*fanny*" ./images/haha_you_fanny.jpg niall@desktop ~/W/project_zeus> find . -name "*Corporate*" ./docs/Standard Spiel For Dim Corporate Types.docx niall@desktop ~/W/project_zeus> find . -name "*v4.0*" ./project/phase3/file_v4.0 ./project/logic/file_v4.0 ./project/outline/file_v4.0 niall@desktop ~/W/project_zeus> find . -name "*11.4*" ./project/phase3/file_v11.4 ./project/logic/file_v11.4 ./project/phase2/file_v11.4 ./project/outline/file_v11.4 niall@desktop ~/W/project_zeus> find . -name "*png*" ./images/different_response.png ./images/grok_initial_prompt_response.png niall@desktop ~/W/project_zeus>
Or (in root project folder):
echo 'find . -name "*$1*"' > search
chmod +x search
niall@desktop ~/W/project_zeus> ./search fanny ./images/haha_you_fanny.jpg niall@desktop ~/W/project_zeus> ./search v1 ./project/phase3/file_v11.4 ./project/phase3/file_v1.0 ./project/logic/file_v11.4 ./project/logic/file_v1.0 ./project/phase2/file_v11.4 ./project/phase2/file_v1.0 ./project/outline/file_v11.4 ./project/outline/file_v1.0 niall@desktop ~/W/project_zeus> ./search "Standard Spiel" ./docs/Standard Spiel For Dim Corporate Types.docx niall@desktop ~/W/project_zeus> ./search ok ./images/grok_initial_prompt_response.png niall@desktop ~/W/project_zeus> ./search file ./project/phase3/file_v11.4 ./project/phase3/file_v1.0 ./project/phase3/file_v4.0 ./project/logic/file_v11.4 ./project/logic/file_v1.0 ./project/logic/file_v4.0 ./project/phase2/file_v11.4 ./project/phase2/file_v1.0 ./project/outline/file_v11.4 ./project/outline/file_v1.0 ./project/outline/file_v4.0 niall@desktop ~/W/project_zeus> ./search .docx ./docs/Standard Spiel For Dim Corporate Types.docx niall@desktop ~/W/project_zeus> ./search prompt ./images/grok_initial_prompt_response.png ./AI/project_prompt.txt ./AI/initial_prompt.txt niall@desktop ~/W/project_zeus> ./search 3_ ./project/phase1/3_full_testing niall@desktop ~/W/project_zeus> ./search prep ./project/phase1/1_prepare_environment
Backups:
Easy backup
Backing up to server (create this file in your own “projects” folder):
niall@desktop ~/projects> nano backup
#!/bin/bash
backup_destination="niall@server:/home/niall/projects"
rsync -azP $1 $backup_destination
echo "Done."
niall@desktop ~/projects> chmod +x backup
Then:
niall@desktop ~/projects> ls
backup* project_persephone/ project_zeus/
niall@desktop ~/projects> ./backup project_zeus
sending incremental file list
project_zeus/
project_zeus/AI/
project_zeus/AI/output/
project_zeus/AI/prompts/
project_zeus/AI/prompts/initial_prompt.txt
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=9/18)
project_zeus/AI/prompts/project_prompt.txt
0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=8/18)
project_zeus/docs/
project_zeus/docs/MS/
project_zeus/docs/PDF/
project_zeus/images/
project_zeus/mess/
project_zeus/mess/mess.txt
0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=5/18)
project_zeus/project/
project_zeus/project/logic/
project_zeus/project/outline/
project_zeus/project/phase1/
project_zeus/project/phase2/
project_zeus/project/phase3/
Done.
Files now on server:
niall@desktop ~/projects> ssh niall@server tree ~/projects
/home/niall/projects
└── project_zeus
├── AI
│ ├── output
│ └── prompts
│ ├── initial_prompt.txt
│ └── project_prompt.txt
├── docs
│ ├── MS
│ └── PDF
├── images
├── mess
│ └── mess.txt
└── project
├── logic
├── outline
├── phase1
├── phase2
└── phase3
16 directories, 3 files
niall@desktop ~/projects>
If everything is up to date:
niall@desktop ~/projects> ./backup project_zeus
sending incremental file list
Done.
But if something has changed:
niall@desktop ~/projects> ./backup project_zeus
sending incremental file list
project_zeus/AI/prompts/
project_zeus/AI/prompts/initial_prompt.txt
20 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=9/18)
Done.
niall@desktop ~/projects>
BYTES % SPEED TIME FILE # CHECK
---------------------------------------------------
20 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=9/18)
Questions:
Why do all this manually? Why not automate it all?
Your project is your bonsai tree, grow it with care. Manually creating the basic structure for your project will remind you of what’s involved and create strong roots. If you can get this right, then the project will almost develop itself. The small amount of discipline required simplifies everything.
Wait, what if I want to rename my project?
Do the following:
niall@desktop ~/projects> ls backup* project_persephone/ project_zeus/To copy the existing to a new name:
niall@desktop ~/projects> cp -r project_zeus/ project_cronos/Or to rename without making a copy:
niall@desktop ~/projects> mv project_zeus/ project_cronos/Then:
niall@desktop ~/projects> ls backup* project_cronos/ project_persephone/ /project_zeusJust leave everything named “project_zeus” or “Project Zeus” inside your project as it is. You will know it now needs revision if there is not a “project_cronos” or “Project Cronos” equivalent file present. If you now successfully backup
project_zeus, you can remove it from your projects folder if so desired.
Backup after rename
niall@desktop ~/projects> ./backup project_cronos sending incremental file list created directory /home/niall/projects/project_cronos ./ AI/ AI/output/ AI/prompts/ AI/prompts/initial_prompt.txt 20 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=9/18) AI/prompts/project_prompt.txt 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=8/18) docs/ docs/MS/ docs/PDF/ images/ mess/ mess/mess.txt 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=5/18) project/ project/logic/ project/outline/ project/phase1/ project/phase2/ project/phase3/ sent 721 bytes received 194 bytes 261.43 bytes/sec total size is 20 speedup is 0.02 Done.
If you’re happy with my structure..
Automation
Shortcuts for UNIX (Linux, Mac, BSD, etc):
mkdir -p project_zeus/{AI/{prompts,output},docs/{PDF,MS},images,mess,project/{logic,outline,phase1,phase2,phase3}}
touch project_zeus/mess/mess.txt && touch project_zeus/AI/prompts/initial_prompt.txt && touch project_zeus/AI/prompts/project_prompt.txt
niall@desktop ~/tmp> tree
.
└── project_zeus
├── AI
│ ├── output
│ └── prompts
│ ├── initial_prompt.txt
│ └── project_prompt.txt
├── docs
│ ├── MS
│ └── PDF
├── images
├── mess
│ └── mess.txt
└── project
├── logic
├── outline
├── phase1
├── phase2
└── phase3
16 directories, 3 files
niall@desktop ~/tmp>
Mess list:
echo 'ls -1 . > mess.txt && echo "Done."' > project_zeus/mess/mess
chmod +x project_zeus/mess/mess
niall@desktop ~/t/p/mess> ./mess
Done.
niall@desktop ~/t/p/mess> cat mess.txt
mess
mess.txt
niall@desktop ~/t/p/mess>
Shortcuts for Windows:
Needs full script..
This guide is, of course, not suitable for every project, but should suffice for less complex ones.
Suggestions welcome.