The Hugo Packet is intended to be hosted in an S3-alike system, with packet items consisting either of files in the S3 bucket, or of distribution codes for publisher-provided downloads.
All items, be they files or codes, can be placed in "sections" to organize them on the page. The sections can be nested to an extent, which will allow for some minimal organizational options. The recommended way is to have a default top level section for the whole packet, and then one or more subsections for categories:
The Packet
- All Items section
- Best Dramatic Presentation section
(all finalists item)
- Finalists
(individual finalist items)
- Best Fancast Section
(all finalists item)
- Finalists
(individual finalist items)
- Best Game Section
(individual finalist items)
System Configuration¶
The S3 connection configuration is system provided; NomNom only supports connections to one S3 endpoint for the packet.
Each packet must store all of its items in a single S3 bucket. That is configured when creating the packet, in the s3_bucket_name field.
Packet Files¶
A packet file has a name, description, and a position (which will be how it is shown relative to the other items in its section)
It also has an S3 Object Key which is the key in the bucket where the file can be found. This can be changed at any time.
Creating a packet file item¶
- Navigate to
/admin/hugopacket/packetfile/ - Select "Add Packet Item" from the top of the page
- Fill in all mandatory fields
- Select "Download (S3 file)" from the access type dropdown
- Fill in the "S3 Object Key" field
Distribution Codes¶
Distribution codes allow convention administrators to provide redeemable codes (such as game keys, digital book codes, or access tokens) to Hugo packet recipients. This system manages code pools, tracks distribution, and ensures each member receives a unique code for each item.
Overview¶
When a packet item is configured as a CODE type, members view their assigned code instead of downloading a file. Each member receives exactly one code per item, and the system tracks which codes have been distributed to prevent duplication.
Code Types¶
Common uses for distribution codes include:
- Game download keys: Steam, GOG, Epic Games Store, etc.
- Digital book access codes: Publishers' download portals
- Streaming access tokens: Temporary viewing codes
- Third-party platform codes: Any external service requiring unique identifiers
Managing Distribution Codes¶
Creating a Code Pool¶
- Navigate to
/admin/hugopacket/distributioncode/ - Click Add Distribution Code
- Fill in the required fields:
- Packet item: Select the PacketFile this code belongs to
- Code: The actual code string (alphanumeric recommended)
- Assigned to: Leave blank (system assigns automatically)
- Save the code
Repeat this process for each code in your pool.
Bulk Import via CSV¶
For large code pools, use the CSV import feature:
- Navigate to
/admin/hugopacket/packetfile/ - Click on the packet item that needs codes
- In the "Distribution Codes" section (visible for CODE-type items), click Import codes from CSV
- Prepare your CSV file in one of two formats:
- Simple format: One code per line, no header
- CSV with headers: Columns
codeand optionalnotes - Select your CSV file and click Upload
The import process: - Skips empty codes - Detects and skips duplicate codes within the upload - Creates new codes that don't exist yet - Updates notes on existing codes when CSV includes different notes - Leaves existing codes unchanged if CSV has no note or same note
Simple Format Example (recommended for most uses):
CSV with Headers Example (use when you need notes):
Exporting Codes¶
To export existing codes (useful for auditing or backup):
- Navigate to
/admin/hugopacket/distributioncode/ - Select the codes you want to export using checkboxes
- From the "Action" dropdown, select Export selected codes to CSV
- Click Go
The exported CSV includes: - The code string - Associated packet item - Assignment status (member email if assigned, "Unassigned" otherwise)
Packet Item Access¶
Automatic Code Assignment¶
When a member accesses a CODE-type packet item:
- System checks if member already has a code for this item
- If yes, displays their existing code
- If no, assigns the next available unassigned code from the pool
- Records the assignment in the database
Once assigned, a member always sees the same code for a given item.
No Access Limits¶
The Hugo Packet system does not enforce access limits for either CODE or DOWNLOAD type items. Members can: - View their assigned codes as many times as needed - Download files repeatedly without restrictions
The system tracks access counts for analytics and monitoring purposes, but never restricts access to content a member is entitled to view.
Insufficient Codes¶
If all codes in a pool are assigned and a new member tries to access the item, they see an error page indicating no codes are available. Add more codes to the pool to resolve this.
Code Display Formatting¶
Codes can optionally display with formatting to improve readability while preserving the raw code for copying.
Setting a Display Format¶
- Navigate to
/admin/hugopacket/packetfile/ - Edit the packet item
- In the Code display format field, enter a template using
#characters as placeholders - Save the item
Example:
- Raw code: ABC12345DEF6789
- Format template: ###-#####-###-####
- Displayed to user: ABC-12345-DEF-6789
When a member clicks "Copy Code", they receive the raw code (ABC12345DEF6789) without separators.
Format Rules¶
- Use
#for alphanumeric character positions - Use any other character as a separator (typically
-or spaces) - Codes shorter than the template stop at the last character (no trailing separators)
- Codes longer than the template are truncated to template length
- Non-alphanumeric characters in raw codes are stripped before formatting
Monitoring Code Distribution¶
View Assignment Status¶
- Navigate to
/admin/hugopacket/distributioncode/ - Use filters:
- By packet item: See all codes for a specific item
- By assignment status: Filter assigned vs. unassigned codes
- By member: Find which codes a specific member received
Access Tracking¶
All member interactions with CODE items are recorded in PacketItemAccess records:
- Navigate to
/admin/hugopacket/packetitemaccess/ - View:
- Member who accessed the item
- Packet item accessed
- Assigned code (if any)
- First access timestamp
- Last access timestamp
- Total view count
This data helps administrators: - Verify code distribution - Troubleshoot member issues ("I never received a code") - Track engagement with packet materials - Audit code usage for publisher reports
Customization¶
Several templates are available to customize packet codes:
hugopacket/no_codes_available.html¶
This template's content block can be replaced to configure the message when no more codes are available for the packet item. packet_file is provided to the template.
hugopacket/display_code.html¶
This template's content block shows the code provided.
Troubleshooting¶
Member Reports Not Receiving a Code¶
- Check if codes exist:
/admin/hugopacket/distributioncode/filtered by packet item - Check member's access record:
/admin/hugopacket/packetitemaccess/filtered by member - If no access record exists, member hasn't visited the item page yet
- If access record exists without code, pool was empty at access time (add more codes)
Duplicate Codes in Import¶
CSV import rejects items containing duplicate codes. Review your CSV for duplicates: - Check for repeated lines - Verify source data integrity - Remove duplicates and retry import
Code Already Exists¶
If import fails because codes already exist in the database: 1. Export existing codes via admin action 2. Compare with your import item 3. Remove duplicates from import file 4. Import only new codes
Member Sees Wrong Code¶
The system guarantees code stability: once assigned, a member always sees the same code for an item. If a member reports seeing a different code: - Verify they're logged into the correct account - Check access records for their NominatingMemberProfile - Confirm they're viewing the correct packet item (category/finalist)
Best Practices¶
Code Pool Sizing¶
- Count your expected Hugo packet recipients
- Inform the publisher of the member count; they will decide how many codes to provide
- Import all codes before making items visible to members
Code Format Consistency¶
- Match publisher's recommended display format when applicable
- Test formatting with actual codes before finalizing
Security Considerations¶
- Codes are visible in plain text to assigned members
- Treat code pools as sensitive data (do not commit to version control)
- Limit admin access to distribution code management
- Monitor access logs for unusual patterns
Publisher Relations¶
- Track code assignment counts for publisher reporting
- Export assignment data regularly as backup
- Provide usage statistics to publishers post-convention
- Keep records of which codes were distributed vs. unused