Skip to main content

Β· 9 min read

As a fast-moving startup, our technology choices directly impact our velocity, scalability, and competitive advantage. This Software Supply Chain Radar provides strategic guidance on technologies we're adopting, exploring, or avoiding across our stack. Our selections prioritize developer productivity, operational efficiency, and sustainable growthβ€”enabling us to deliver exceptional products with minimal overhead.

Stargately Software Supply Chain Radar

🧩 Categories and Decision Framework​

Core Categories:

  • πŸ› οΈ Engineering: Our technical foundation and infrastructure
  • 🎨 Design: Tools that shape our user experience and brand identity
  • πŸ“Š Product: Solutions that power our core business capabilities
  • πŸ“£ Marketing & Operations: Systems that drive growth and operational excellence

Decision Framework:

  • βœ… Adopt: Battle-tested technologies we're investing in and building expertise around
  • πŸ§ͺ Trial: Promising technologies we're validating in non-critical applications
  • πŸ” Assess: Emerging technologies we're researching for potential future adoption
  • ⛔️ Hold: Technologies we're actively avoiding or phasing out

πŸ› οΈ Engineering​

Core Languages & Frameworks​

TechnologyStrategic ValueStatus
TypeScriptFoundation for scalable frontends with strong type safetyβœ… Adopt
GolangPowers our high-performance backend services and APIsβœ… Adopt
Next.js & ReactOur primary React framework for production applicationsβœ… Adopt
Apollo GraphQLUnified data graph for frontend-backend communicationβœ… Adopt
TRPCType-safe API layer for internal servicesπŸ” Assess

Mobile​

TechnologyStrategic ValueStatus
Expo/React NativeCross-platform mobile app developmentβœ… Adopt
FastlaneMobile app deployment and release automationπŸ§ͺ Trial

Coding​

TechnologyStrategic ValueStatus
VSCodeCode editorβœ… Adopt
Windsurf or CursorAI-powered code assistantβœ… Adopt
IntelliJ Family IDEsIDEβœ… Adopt

Infrastructure & DevOps​

TechnologyStrategic ValueStatus
Google CloudPrimary cloud provider for production workloadsβœ… Adopt
DockerContainer standard for consistent development and deploymentβœ… Adopt
Render.comSimplified cloud hosting for non-critical servicesβœ… Adopt
betterstackUnified monitoring and observabilityβœ… Adopt
WasabiCost-effective object storage for media and backupsβœ… Adopt
ngrokSecure tunneling for local developmentβœ… Adopt
mitmproxyAPI debugging and inspectionβœ… Adopt
ContaboCost-effective VPS hosting for non-critical workloadsπŸ§ͺ Trial
VmissAlternative cloud provider for geographic distributionπŸ§ͺ Trial
GitHub Repo & ActionsSource control and CI/CD automation for streamlined workflowsβœ… Adopt
Prometheus GrafanaMonitoring and observabilityβœ… Adopt
TemporalWorkflow orchestration for data pipelinesπŸ§ͺ Trial
signozMonitoring and observabilityπŸ” Assess

Data​

TechnologyStrategic ValueStatus
PostgreSQLPrimary relational database for transactional dataβœ… Adopt
RedisIn-memory data store for caching and real-time featuresβœ… Adopt
MetabaseData analysis and visualizationβœ… Adopt
PrismaORMπŸ§ͺ Trial
TypeORMORMπŸ§ͺ Trial

LLM​

TechnologyStrategic ValueStatus
OpenAI Agents PythonAI agent development for supply chain automation workflowsπŸ” Assess
OpenAI and Claude APIsAI-powered content generation and analysisβœ… Adopt

Technologies We're Avoiding​

TechnologyRationaleStatus
CSS-in-JSPerformance concerns and unnecessary complexity⛔️ Hold
MongoDBPrefer PostgreSQL's JSONB for document needs⛔️ Hold
HerokuCost concerns at scale and limited customization⛔️ Hold
DigitalOceanStandardizing on GCP for better integration⛔️ Hold
AzureUnnecessary complexity for our current needs⛔️ Hold
UptimeRobotLimited capabilities compared to betterstack⛔️ Hold
NetlifyPrefer Render for better pricing and features⛔️ Hold
VercelCost concerns at scale⛔️ Hold
DatadogCost prohibitive for our current stage⛔️ Hold
CharlesProxyPrefer mitmproxy (open source alternative)⛔️ Hold
AirflowWorkflow orchestration for data pipelines⛔️ Hold

🎨 Design & User Experience​

AI-Assisted Design & Design Resources​

TechnologyStrategic ValueStatus
Claude as UI/UX DesignerAI-assisted design ideation and feedbackβœ… Adopt
ChatGPT for IllustrationsRapid generation of custom visual assetsβœ… Adopt
LandbookCurated inspiration for landing page designπŸ” Assess
JitteranimationπŸ” Assess

Design Tools & Systems​

TechnologyStrategic ValueStatus
FigmaCentral hub for collaborative design and prototypingβœ… Adopt
WhimsicalLow-friction diagramming for architecture and workflowsβœ… Adopt
shadcn/tailwindUtility-first CSS framework for consistent, maintainable UIβœ… Adopt
cruip.com templatesAccelerating landing page development with quality templatesβœ… Adopt

Technologies We're Avoiding​

TechnologyRationaleStatus
Ant DesignInconsistent with our design language⛔️ Hold
Generic Stock ImagesPrefer custom illustrations for brand differentiation⛔️ Hold

πŸ“Š Product​

Project Management​

TechnologyStrategic ValueStatus
GitHub ProjectsIntegrated task management aligned with our development workflowβœ… Adopt

Financial Infrastructure​

TechnologyStrategic ValueStatus
StripeScalable, developer-friendly payments infrastructureβœ… Adopt
BeancountBookkeeping and financial reportingβœ… Adopt
IntuitTax preparation and managementβœ… Adopt
CoinbaseUSDC and Bitcoin as treasury & Crypto tradingβœ… Adopt
MercuryBanking and payment processingβœ… Adopt
American ExpressCredit cardβœ… Adopt
KrakenCrypto tradingπŸ§ͺ Trial
Crypto tax calculatorTax preparationβœ… Adopt

Product Management​

TechnologyStrategic ValueStatus
Claude & ChatGPT as PMAI-assisted product planning, user stories, and market researchβœ… Adopt
In-house PM AgentπŸ§ͺ Trial

Growth & Analytics​

TechnologyStrategic ValueStatus
SemrushComprehensive SEO and content marketing platformβœ… Adopt
Google AnalyticsCore web analytics for data-driven decisionsβœ… Adopt
Google Search ConsoleSearch performance monitoring and optimizationβœ… Adopt
AmplitudeProduct analytics for deeper user behavior insightsπŸ§ͺ Trial
Moz.comSupplementary SEO research and optimizationπŸ” Assess

πŸ“£ Distribution & Operations​

AI-Assisted Marketing​

TechnologyStrategic ValueStatus
Claude as Marketing ManagerAI-assisted content strategy, copywriting, and campaign planningβœ… Adopt
ChatGPT Deep ResearchIn-depth market analysis and competitive intelligence gatheringβœ… Adopt
In-house Marketing AgentπŸ§ͺ Trial

Content & Communication​

TechnologyStrategic ValueStatus
DocusaurusDocumentation and content management systemβœ… Adopt
SendgridTransactional and marketing email infrastructureβœ… Adopt
Buffer.comSocial media scheduling and analyticsβœ… Adopt
SubstackNewsletter platform for audience building and thought leadershipβœ… Adopt
MediumPublishing platform for broader reach and industry visibilityπŸ§ͺ Trial
GitHub starred projectsCurated resource library for developer community engagementβœ… Adopt
ZapierWorkflow automation across third-party applicationsβœ… Adopt
DiscordCommunity building and real-time developer engagementβœ… Adopt
TelegramDirect communication channel for customersβœ… Adopt
X / TwitterIndustry presence and thought leadership distributionβœ… Adopt

Technologies We're Avoiding​

TechnologyRationaleStatus
Deepseek as Marketing ManagerTendency to generate hallucinated/exaggerated content⛔️ Hold

πŸ”„ Strategic Technology Governance​

Quarterly Review Process​

Our Software Supply Chain Radar is a living document that evolves with our business. Each quarter, we conduct a structured review process to:

  1. Evaluate Current Technologies: Assess performance, cost, and alignment with business goals
  2. Explore Emerging Options: Research innovations that could provide competitive advantages
  3. Refine Our Strategy: Make deliberate decisions about what to adopt, trial, or phase out

Decision Principles​

  • Developer Experience First: We prioritize tools that maximize developer productivity and joy
  • Operational Simplicity: We favor technologies that reduce maintenance burden and cognitive load
  • Sustainable Choices: We select technologies that will scale with us and avoid technical debt
  • Business Alignment: We invest in technologies that directly support our core value proposition

Feedback & Contribution​

This radar represents our collective wisdom. We encourage all team members to contribute insights, suggest new technologies, and challenge our assumptions. Together, we'll build a technology foundation that powers our growth and innovation.

Β· 6 min read

In Silicon Valley startups, Docker Compose is one of the preferred tools for quickly deploying and managing containerized applications. However, convenience often comes with security risks. As a Site Reliability Engineer (SRE), I am well aware that security vulnerabilities can lead to catastrophic consequences. This article will share the best security practices I have summarized in my actual work combining Docker Compose with Ubuntu systems, helping you enjoy the convenience of Docker Compose while ensuring system security.

Secure Deployment with Docker Compose + Ubuntu

I. Hardening Ubuntu System Security​

Before deploying containers, it is crucial to ensure the security of the Ubuntu host itself. Here are some key steps:

1. Regularly Update Ubuntu and Docker​

Ensure that both the system and Docker are kept up-to-date to fix known vulnerabilities:

sudo apt update && sudo apt upgrade -y
sudo apt install docker-ce docker-compose-plugin

2. Restrict Docker Management Permissions​

Strictly control Docker management permissions to prevent privilege escalation attacks:

sudo usermod -aG docker deployuser
# Prevent regular users from easily obtaining docker management permissions

3. Configure Ubuntu Firewall (UFW)​

Reasonably restrict network access to prevent unauthorized access:

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

4. Properly Configure Docker and UFW Interaction​

By default, Docker bypasses UFW to configure iptables, so manual control is recommended:

Modify the Docker configuration file:

sudo nano /etc/docker/daemon.json

Add the following content:

{
"iptables": false,
"ip-forward": true,
"userland-proxy": false
}

Restart the Docker service:

sudo systemctl restart docker

Explicitly bind addresses in Docker Compose:

services:
webapp:
ports:
- "127.0.0.1:8080:8080"

II. Docker Compose Security Best Practices​

The following configurations apply to Docker Compose v2.4 and above. Note the differences between non-Swarm and Swarm modes.

1. Restrict Container Permissions​

Containers running as root by default pose high risks; change to non-root users:

services:
app:
image: your-app:v1.2.3
user: "1000:1000" # Non-root user
read_only: true # Read-only filesystem
volumes:
- /tmp/app:/tmp # Mount specific directories if write access is needed
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE

Explanation:

  • A read-only filesystem prevents tampering within the container.
  • Ensure mounted volumes are limited to necessary directories.

2. Network Isolation and Port Management​

Precisely divide internal and external networks to avoid exposing sensitive services to the public:

networks:
frontend:
internal: false
backend:
internal: true

services:
nginx:
networks: [frontend, backend]
database:
networks:
- backend
  • Frontend network: Can be open to the public.
  • Backend network: Strictly restricted, internal communication only.

3. Secure Secrets Management​

Sensitive data should never be placed directly in Compose files:

In single-machine mode:

services:
webapp:
environment:
- DB_PASSWORD_FILE=/run/secrets/db_password
volumes:
- ./secrets/db_password.txt:/run/secrets/db_password:ro

In Swarm mode:

services:
webapp:
secrets:
- db_password
environment:
DB_PASSWORD_FILE: /run/secrets/db_password

secrets:
db_password:
external: true # Managed through Swarm's built-in management

Note:

  • Docker's native Swarm Secrets cannot directly use external tools like Vault or AWS Secrets Manager.
  • If external secret storage is needed, integrate the reading process yourself.

4. Resource Limiting (Adapt to Docker Compose Version)​

Container resource limits prevent a single container from exhausting host resources.

Docker Compose Single-Machine Mode (v2.4 recommended):

version: '2.4'

services:
api:
image: your-image:1.4.0
mem_limit: 512m
cpus: 0.5

Docker Compose Swarm Mode (v3 and above):

services:
api:
deploy:
resources:
limits:
cpus: "0.5"
memory: 512M
reservations:
cpus: "0.25"
memory: 256M

Note: In non-Swarm environments, the deploy section's resource limits do not take effect, be sure to pay attention to the Compose file version.

5. Container Health Checks​

Set up health checks to proactively detect issues and reduce service downtime:

services:
webapp:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s

6. Avoid Using the Latest Tag​

Avoid the uncertainty brought by the latest tag in production environments, enforce specific image versions:

services:
api:
image: your-image:1.4.0

7. Proper Log Management​

Prevent container logs from exhausting disk space:

services:
web:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "5"

8. Ubuntu AppArmor Configuration​

By default, Ubuntu enables AppArmor, and it is recommended to check the Docker profile status:

sudo systemctl enable --now apparmor
sudo aa-status

Docker on Ubuntu defaults to enabling AppArmor without additional configuration. It is generally not recommended to enable SELinux on Ubuntu simultaneously to avoid conflicts.

9. Continuous Updates and Security Scans​

  • Image Vulnerability Scanning: It is recommended to integrate tools like Trivy, Clair, or Snyk in the CI/CD process:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy image your-image:v1.2.3
  • Automated Security Update Process: Rebuild images at least weekly to fix known vulnerabilities.

III. Case Study: Lessons from Docker Compose Configuration Mistakes​

In July 2019, Capital One suffered a major data breach affecting the personal information of over 100 million customers 12. Although the main cause of this attack was AWS configuration errors, it also involved container security issues similar to your described situation:

  1. Container Permission Issues: The attacker exploited a vulnerability in a Web Application Firewall (WAF) running in a container but with excessive permissions.
  2. Insufficient Network Isolation: The attacker could access other AWS resources from the compromised container, indicating insufficient network isolation measures.
  3. Sensitive Data Exposure: Due to configuration errors, the attacker could access and steal a large amount of sensitive customer data.
  4. Security Configuration Mistakes: The root cause of the entire incident was the accumulation of multiple security configuration errors, including container and cloud service configuration issues.

This incident resulted in significant financial losses and reputational damage for Capital One. It is reported that the company faced fines of up to $150 million due to this incident, along with a long-term trust crisis. This case highlights the importance of security configuration in container and cloud environments, especially in permission management, network isolation, and sensitive data protection. It reminds us that even seemingly minor configuration errors can be exploited by attackers, leading to disastrous consequences.

IV. Conclusion and Recommendations​

Docker Compose combined with Ubuntu is a convenient way to quickly deploy container applications, but security must be integrated throughout the entire process:

  • Strictly control container permissions and network isolation.
  • Avoid sensitive data leaks.
  • Regular security scanning and updates.
  • It is recommended to migrate to advanced orchestration systems like Kubernetes for stronger security assurance as the enterprise scales.

Security is a continuous practice with no endpoint. I hope this article helps you better protect your Docker Compose + Ubuntu deployment environment.

Β· 4 min read

Creating a compelling 5-minute demo is an art. It's about capturing attention, conveying your message effectively, and leaving your audience wanting more. This guide provides a structured approach to designing a brief yet impactful demonstration of your software project.

Demo Presentation

Prepare a script​

Use this table to create a script tailored to a software platform demo:

GuidelineSlides or screen recordingScript
1. Introduction (30 seconds):
Quickly introduce yourself/team. Provide a brief overview of your project in one sentence. Start with a captivating hook. Your first sentence should grab attention.
Slide with project title and team photo."Hello, I’m [Your Name], part of the team behind [Project Name], where we simplify [main function of the software product]."
2. Problem Statement (30 seconds):
Clearly state the problem or need you've identified within the broader ecosystem. Make it relatable. If the audience can immediately understand the problem, they'll be more invested in your solution.
Slide with key statistics or images depicting the problem."Despite advances in technology, [describe a common problem your software addresses]. This leads to [describe a common consequence]."
3. Solution (60 seconds):
Describe your solution and how it leverages the target partner. Highlight the most innovative feature of your project. Be concise but powerful. Process maps can work wonders here!
Screen recording showing the solution in action, focusing on its unique features."At [Project Name], we tackle this by [briefly describe how your solution works]. Let me show you how it works."
4. Value Proposition (30 seconds):
Following the solution, explain how your project brings value to the ecosystem. Discuss potential market size or user base and how your solution addresses their needs. Quantify the impact where possible. Numbers can speak louder than words.
Slide or overlay in the screen recording showing key benefits and stats."With [Project Name], users have seen [mention specific benefits], impacting over [mention user base or market size]."
5. Demo (60 seconds):
Showcase a quick, good-looking screen recording that visually explains how your project works. Focus on the user experience and the seamless functionality of your software platform. Seeing is believing. Ensure your demo is glitch-free and rehearsed!
Detailed screen recording of the platform in use, demonstrating key features and user workflow.[No script - let the demo demonstrate the functionality; use subtitles or light annotations if needed.]
6. Progress & Next Steps (30 seconds):
Share what stage your project is at. Highlight key achievements or milestones, especially any traction or user engagement so far. Describe what next steps look like for this project. If applicable, describe briefly your roadmap to sustainability or long-term dedication. Show momentum. If you've achieved things in a short time, it builds confidence.
Slide or brief video clip highlighting milestones and roadmap."Since launching, we've achieved [list milestones], and we're excited about next steps, including [describe future features or expansions]."
7. Ask & Collaboration + Conclusion (30 seconds):
While you won’t be able to solicit end-users to your project, you can invite the community to take a look at your project and give feedback, mention you’re looking for partners to work with, and/or come talk to you afterward. Reiterate the impact of your solution and your dedication to the ecosystem.
Closing slide with contact info and a call to action."Thanks for watching. We're keen to collaborate and refine [Project Name]. Reach out to join us on this journey and make [project goal] a reality."

And then use Elevenlabs to prepare the voice track.

Record the video​

  1. The resolution should be at least 1080p, and 1440p is preferred.
  2. Ensure your screen recording software captures high-quality video and audio without lags or glitches.
  3. Use a clean and organized desktop environment to prevent distractions in the video.

Edit the Video​

Use iMovie or a similar video editing software to compile and edit the video:

  • Integrate the screen recordings with slides and scripted voiceovers.
  • Ensure transitions are smooth and professional.
  • Add annotations or highlights in the screen recording to draw attention to the key features as they are demonstrated.
  • Review the edited video to ensure clarity and engagement, making adjustments as needed for optimal viewer experience.

This approach ensures your software product is showcased professionally, highlighting its ease of use and robust features effectively to your audience.