Writing and Video Portfolio

TLDR

Robert Terakedis -- Turning Tech Chaos into Organized Harmony.

Explore my portfolio of technical writing, video tutorials, and automation scripts. Let’s collaborate to simplify complex challenges and create impactful solutions.

What I Do

I specialize in:

  • Technical Documentation: Creating clear, actionable resources for teams and customers.
  • Process Automation: Streamlining workflows to eliminate inefficiencies.
  • Team Enablement: Empowering teams with intuitive tools and training.

Explore my portfolio below to see how I turn complex challenges into organized solutions.

My Toolkit

Development & Automation

Tools I use to build and automate solutions:

  • Git Repos: GitHub | Bitbucket
  • Git Clients: Tower | SourceTree | VS Code
  • Developer Tools: VS Code | BBEdit | Postman | Chrome Developer Tools

Documentation & Training

Creating impactful resources with:

  • Tools: Camtasia | SnagIt | Markdown | Hugo | Confluence | Readme.com

Productivity & Collaboration

Streamlining teamwork with:

  • Productivity: Google Workspace | Office 365
  • Task Management: Jira | Jira Service Manager | Trello | Microsoft Planner

Diagramming & Visualization

Visualizing ideas with:

  • Tools: Miro | LucidChart | Draw.io | Visio

Platforms

Experienced across:

  • Work OS: Apple iPadOS and macOS (preferred) | Windows 10/11 and ChromeOS (experienced)

This site uses the following technologies: Cloudflare (Websites, Analytics, Pages), Github, Hugo, Markdown, and the Hugo Clarity theme.

About Public Content Below

Some of the content below was written by me but owned by another organization and may be removed at any time.

Video Samples

Below is an example of a technical overview video I created to help customers and partners understand a new feature in OneTrust. This video demonstrates my ability to simplify complex topics and present them in an engaging, customer-focused way.

Category About the Video
Technical Overview As part of the Winter 2025 release, the OneTrust Consent & Preferences team released a new feature to track implicit consent for purposes. I created this video to help customers and partners understand implicit consent and how to enable and use it within OneTrust.

Writing Samples

Category Document The Problem The Solution
Hands-On Lab Getting Started with Digital Workspace New users needed quick onboarding with UEM Skills. Designed and authored Apple iOS/macOS modules, updated biannually for SaaS feature changes.
Troubleshooting Troubleshooting macOS Management Sales teams lacked macOS troubleshooting skills. Authored a comprehensive guide based on testing and research, iterated three times.
Tutorial Managing iOS Updates Customers were confused by iOS update behavior. Authored a tutorial clarifying configuration and expected behaviors across iOS versions.
Glossary Mapping concepts from Munki to Workspace ONE UEM macOS admins needed help understanding Munki integration. Created a glossary linking Workspace ONE equivalents to Munki terminology.
Best Practices Best Practices for Apple Admins in Workspace ONE UEM Lack of survivability documentation for Apple device management. Created a guide to help admins set up environments for unexpected events like layoffs.

Additional Writing Samples

For additional reference, I've included links to some additional documents that I've authored and/or contributed below:

Code Sample

I strive to find repeatable processes and automate them. At one employer, I created multiple product satisfaction surveys in Gainsight PX. I wrote a script to combine the responses from all the surveys into a single CSV file (that also integrated additional information about the respondents and the accounts to which they belong). In the snippet below, I use Python to aggregate the responses from a single survey in Gainsight PX. I subsequently posted this Github Gist to the Gainsight PX Community to assist others in learning how to leverage the scrollID to return multiple pages of data from the API. The full version of this script included additional helper functions for the additional API's (account/user info), multi-threading, and recursion (aggregating responses from multiple API calls).

 1# Example Gainsight Paging API Call
 2
 3##############################################################################
 4# Reference API documentation:
 5# https://gainsightpx.docs.apiary.io/#reference/surveyresponse
 6#
 7# Use the returned scrollId to make a request for the next page of results (i.e. /users?pageSize=100&scrollId=XXXXXXX)
 8# Scroll until the returned result list is less than the requested size. Do not depend on the scrollId becoming null,
 9# in some cases it does not be null even though the last page of results is returned.
10##############################################################################
11
12
13import json, requests, sys
14from datetime import datetime, timedelta, date
15
16##############################################################################
17## CONSTANTS
18##############################################################################
19
20# BaseURL for API calls
21BASE_URL = "BASE-URL-HERE"
22# API Key Name
23API_KEY_NAME = "X-APTRINSIC-API-KEY"
24# API Key Value
25API_KEY_VALUE = "GUID-HERE"
26# API Page Size
27API_PAGE_SIZE = 100
28# Survey Engagement ID
29ENGAGEMENT_ID = "ENGAGEMENT-ID-HERE"
30
31
32##############################################################################
33## HELPER FUNCTION
34##############################################################################
35
36# create a function to get the list of survey responses for a specific survey
37def get_surveyresponsesapi(engagementId, scrollId, datefiltertimestamp):
38
39    if scrollId == "":
40        # Set the request url for the first page of results
41        if datefiltertimestamp == "":
42
43            url = BASE_URL + "/v1/survey/responses?filter=engagementId=="+ engagementId + "&pageSize=" + str(API_PAGE_SIZE) + "&sort=-date"
44
45        else:
46
47            url = BASE_URL + "/v1/survey/responses?filter=engagementId=="+ engagementId + ";date>" + str(datefiltertimestamp) + "&pageSize=" + str(API_PAGE_SIZE) + "&sort=-date"
48
49    else:
50        # Set the request url for the subsequent pages of results
51        url = BASE_URL + "/v1/survey/responses?filter=engagementId=="+ engagementId + "&pageSize=" + str(API_PAGE_SIZE) + "&sort=-date" + "&scrollId=" + scrollId
52
53    payload={}
54    headers = {
55    'Accept': 'application/json',
56    API_KEY_NAME: API_KEY_VALUE
57    }
58
59    # Make the API call
60    return requests.request("GET", url, headers=headers, data=payload)

For the full script and additional helper functions, visit my Gist

Let's Connect

Thank you for exploring my portfolio! If you'd like to learn more about my work or discuss potential collaboration opportunities, feel free to connect with me on LinkedIn.