# DigitalOcean Spaces Cost Estimate — Offer Package Downloads

**Date:** 24 August 2026
**Scope:** Cost of serving successful-applicant offer packages from DigitalOcean Spaces for one admissions period (~1,500 applicants).
**Reference package:** Package 144, read live from the `sat-legacy-packages` bucket.

---

## 1. Summary

| | |
|---|---|
| **Total monthly cost** | **$5.00** (flat Spaces subscription) |
| **Cost added by the 1,500-applicant download load** | **$0.00** |
| Metered worth of that traffic | ~$0.04 |
| Egress consumed | 3.70 GiB of the 1,024 GiB included allowance (0.36%) |
| Storage consumed | 10.84 MiB of the 250 GiB included allowance (0.004%) |

The download traffic for an entire intake is small enough that it is fully absorbed by the included allowances. The bill is the $5.00 subscription minimum, which is charged whether or not anyone downloads anything.

---

## 2. The reference package

Package 144 contains 9 files, listed directly from object storage under the key prefix `144/`:

| File | Bytes | Previewable in browser |
|---|---:|:---:|
| Library Information brochure Villa campus.pdf | 735,683 | yes |
| DASGS and DTVE Fees 2023-2024.pdf | 507,242 | yes |
| Internet brochure Villa Campus.pdf | 447,148 | yes |
| Welcome Day Schedule.png | 395,617 | yes |
| Orientation Week Schedule.png | 358,162 | yes |
| SVGCC Library pre-registration form.doc | 130,560 | no |
| CXC CAPE Year 1 Registration Letter 2023.docx | 34,709 | no |
| Letter re. Uniform Requirements.docx | 23,496 | no |
| Terms of Agreement for Discipline DASGS.docx | 14,436 | no |
| **Total (9 files)** | **2,647,053 B** | |

- **2,647,053 bytes = 2.52 MiB = 2.65 MB**
- Previewable subset (3 PDFs + 2 PNGs): 2,443,852 B — these can be transferred twice by an applicant who previews a file and then downloads it.
- Non-previewable subset (Word documents): 203,201 B — download only.

For context, the other packages currently in the bucket are comparable in size:

| Package | Files | Size |
|---|---:|---:|
| 99 | 10 | 4.12 MiB |
| 137 | 1 | 0.05 MiB |
| 143 | 8 | 2.49 MiB |
| 144 | 9 | 2.52 MiB |
| 145 | 10 | 1.65 MiB |
| **Bucket total** | **38** | **10.84 MiB** |

---

## 3. How the bytes are delivered

`DefaultController::serveFile()` (`modules/dasgsdtvefull/controllers/DefaultController.php:622`) issues a short-lived presigned URL and redirects the browser to it. Consequences for costing:

- Bytes flow **Spaces → applicant** directly. They never pass through the Droplet, so **none of this consumes Droplet transfer**; it all lands on the Spaces outbound allowance.
- Previews are **click-triggered, not auto-loaded**. `_preview_modal.php:38` sets the iframe `src` only when a file link is clicked and clears it when the modal closes, so simply opening the offer page transfers no package bytes.
- Presigned URLs expire after 600 seconds (`FILE_URL_TTL`), which limits link sharing and therefore unbudgeted re-downloads by third parties.

---

## 4. DigitalOcean Spaces pricing (Standard Storage)

| Item | Rate |
|---|---|
| Base subscription | $5.00 / month |
| Included storage | 250 GiB (across all buckets) |
| Included outbound transfer | 1,024 GiB (across all buckets) |
| Additional storage | $0.02 / GiB / month |
| Additional outbound transfer | $0.01 / GiB |
| Inbound transfer (uploads from SAT) | Free — never counts against the allowance |
| Per-request / API operation fees | **None** |
| CDN | Included at no extra cost (CDN egress counts against the same transfer allowance) |

Because there are no per-request charges, the ~13,500 GET requests generated by 1,500 applicants × 9 files cost nothing.

Sources: [Spaces Pricing — DigitalOcean Docs](https://docs.digitalocean.com/products/spaces/details/pricing/), [Spaces Object Storage Pricing](https://www.digitalocean.com/pricing/spaces-object-storage)

---

## 5. Egress calculation

**Baseline** — 1,500 applicants each download all 9 files once:

```
1,500 × 2,647,053 B = 3,970,579,500 B
                    = 3.70 GiB  (3.97 GB decimal)
```

### Scenario sensitivity

| Scenario | Assumption | Total egress | % of 1,024 GiB allowance | Metered value @ $0.01/GiB | Added cost |
|---|---|---:|---:|---:|---:|
| Baseline | each file downloaded once | 3.70 GiB | 0.36% | $0.037 | **$0.00** |
| Preview + download | the 5 PDF/PNG files transferred twice | 7.11 GiB | 0.69% | $0.071 | **$0.00** |
| Heavy | 3× baseline (retries, second device, re-downloads) | 11.09 GiB | 1.08% | $0.111 | **$0.00** |
| Pessimistic | 10× baseline | 36.98 GiB | 3.61% | $0.370 | **$0.00** |

**Headroom:** it would take roughly **415,000 full package downloads** — about **277 downloads per applicant** at an intake of 1,500 — before this package's traffic exhausted the 1,024 GiB included allowance.

---

## 6. Storage calculation

Current bucket usage is 10.84 MiB (0.0106 GiB) across 5 packages — 0.004% of the 250 GiB included. Even at 500 stored packages averaging 2.5 MiB, usage would be about 1.25 GiB, or 0.5% of the allowance. **Storage cost: $0.00 above the subscription.**

---

## 7. Risks and assumptions

1. **Figures come from the MinIO test bucket.** Package 144 is the working stand-in for production content. If production packages differ materially in size, rerun the numbers — the method is unchanged.
2. **The estimate holds because packages are documents.** Rich media changes the picture sharply: a single 500 MB orientation video downloaded by 1,500 applicants is 699 GiB, or 68% of the allowance in one file. A second such file would push the account into overage.
3. **The allowance is account-wide.** The 1,024 GiB is shared across all buckets on the account, so other Spaces workloads draw from the same pool.
4. **The $5.00 is a floor, not a variable cost.** It applies from the moment the first bucket exists, prorated hourly if all buckets are destroyed.

---

## 8. Conclusion

Serving offer packages to approximately 1,500 successful applicants for this admissions period costs **$5.00 per month** — the flat DigitalOcean Spaces subscription. The download traffic itself adds **nothing**, consuming roughly one third of one percent of the included transfer allowance. Even under a tenfold-worse usage pattern than expected, the load remains inside the included allowance with over 96% headroom remaining.
