{
  "id": 16601059,
  "title": "Two Packages, One Venv, Zero Excuses: Designing a Frictionless First Run**",
  "url": "https://urgent.news/2026/10/26/two-packages-one-venv-zero-excuses-designing-a-frictionless-first-run",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-10-26T12:43:12.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/revanzart/two-packages-one-venv-zero-excuses-designing-a-frictionless-first-run-dnh"
  },
  "original_language": "en",
  "account": "The author recounts a pivotal moment when they spent two hours manually correcting CSV metadata headers, realizing that packaging needed improvement. They discovered each stock platform requires a specific CSV format, and any discrepancy instantly rejects the file without any warnings or partial uploads. To solve this, they created a script called make_metadata.py that generates the exact header each platform demands, supporting multiple formats. The script now handles Adobe Stock, Vecteezy, and Dreamstime, emitting the appropriate CSV file for each.\n\nTo avoid double-uploading, which could flag their account and block their distribution channel, they implemented upload_tracker.py to keep track of submitted assets. This one-line tracker eliminates duplicate posts and requires no external dependencies. All four scripts are built using only the Python standard library, with no additional packages required. This allows for quick setup on any machine, even with limited resources.\n\nThe author emphasizes the importance of a frictionless setup process, as they had previously abandoned runs due to version conflicts and dependency issues. They advocate for a single virtual environment with a maximum of two third-party packages, which they keep updated. The scripts also include features for creating product covers, PDF outputs, and optimizing rendering processes to ensure the final assets are sale-ready.\n\nAfter refining the tools, the author has packaged over 39 products, generating 856 MB of output. These tools have successfully enabled 58 pieces of art to sell on Adobe Stock. The author shares their packaging layer as a starter kit, designed to remove common failure points and allow creators to focus on producing high-quality content.",
  "summary": "I still have the CSV that got rejected. Adobe's uploader bounced a batch of 12 images because my metadata header had six columns instead of five. Not \"wrong values in column six\". The whole file, refused on sight. I sat there at 11pm renaming columns by hand in a spreadsheet, and I remember thinking: the art took twenty minutes, the paperwork took two hours. That was the moment I stopped treating…",
  "key_points": [
    "Author spent two hours correcting CSV metadata headers manually.",
    "Created makemetadata.py script for platform-specific CSV generation.",
    "Implemented uploadtracker.py to prevent duplicate uploads."
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}