Who operates this site
Steve Keator operates this personal website as an individual, offering software development, connected systems and automation services. For a privacy question or a request about your information, use the Contact form and include “Privacy request” in your message.
Information you choose to send
When you submit the Contact form, your name, reply email address and message are sent to Netlify Forms to handle your inquiry and notify Steve. The enhanced form also supplies a random submission reference, and a hidden Website field supports spam screening. Your email address supplies the notification’s Reply-To so Steve can respond. The website does not put your message into browser storage or analytics.
Netlify stores form submissions in the website account, and notification emails create a separate copy in Steve’s mailbox. Netlify documents spam filtering with Akismet and a honeypot field. No reCAPTCHA or other third-party browser challenge is included in this implementation. A successful submission response does not guarantee inbox delivery or a reply. Please avoid sending passwords, payment details, health information or other sensitive material. See Netlify’s submission handling and spam filtering.
Hosting and other services
Netlify provides website hosting and form processing. Connecting to a hosting network discloses technical information, including an IP address. Provider logging, security processing, access and storage depend on the service configuration; this notice makes no zero-log or anonymous-data promise. DNS and any proxy services also process network information according to their configurations.
Fonts and page assets are served as first-party files. Following LinkedIn or another external link sends a request to that service. See Netlify’s privacy information for provider information. Netlify distinguishes its own controller activities from processing it performs for customers; applicable customer processing terms also govern the service.
Preferences in your browser
site-theme saves your palette choice, and site-connections-paused saves your connector-motion pause choice. Both remain until changed or cleared. The older site-motion-paused value is read for compatibility and removed when a new pause choice is saved.
site-privacy-preferences stores a version number, your optional-analytics choice and an expiry timestamp. It contains no name, email address or visitor identifier. The choice is valid for 180 days after saving. An expired local-storage record may remain until replaced or cleared, but cannot authorize analytics. Use Privacy settings in the footer to change your choice, or clear this browser’s site data. The website works when optional analytics is rejected.
Optional Google Analytics
Google Analytics 4 measures use of this site only after you choose Allow analytics. Before that choice, or when you reject it, the Google tag is blocked entirely: this implementation sends no analytics request or consent ping to Google. Contact, contact-success and privacy routes are excluded. You can reject or withdraw without losing website features. Advertising storage, advertising user data and advertising personalization stay denied; Google Signals and advertising-personalization signals are disabled in this implementation.
The site explicitly sends one page-view event per measured page load, with the page title and an origin-and-path address that excludes query strings and fragments. The page referrer is cleared. No inquiry names, email addresses, phone numbers, addresses, messages or submission references are supplied to analytics. Google also processes browser/device, language, session, network and cookie-identifier information; these records are not described as anonymous. Google may generate automatic first-visit, session and engagement records or configured enhanced-measurement events. The site's explicit page-view event is not a claim that Google creates no other events.
After permission, first-party Google cookies include _ga and the stream-specific _ga_MQ91358FYS, used for visitor/session measurement. The implementation configures a maximum lifetime of 180 days, with renewal disabled; browsers or provider behavior may shorten it. Cookie expiry is separate from Google property data-retention settings. Analytics records follow that property's retention controls; aggregate reports and backups may have different handling. No unverified fixed server-side retention period is promised. See Google's cookie information and data retention controls.
Change your choice through Privacy settings in the footer. Withdrawing stops future measurement, removes accessible first-party GA cookies and reloads a page whose tag had already loaded. It does not automatically erase prior Google records, reports, exports or backups. The site asks for a new choice when enabling this implementation; earlier review-era preferences do not authorize the newly active tag. Read how Google uses information from sites using its services and Google's IP-processing explanation. Questions and requests can use the Contact route described here.
Retention and privacy requests
Inquiry correspondence is kept only while needed to handle your inquiry or resulting work. Stored correspondence is reviewed periodically and copies no longer needed are removed. Netlify form records and mailbox notifications are separate copies; deleting one does not automatically delete the others or provider backups. The website code does not set an automatic deletion period for these services. Provider logs and backups follow the relevant service controls and terms.
The 180-day validity of a browser preference is not an inquiry, log or backup retention period. For a question about retention or a request to access, correct or delete information, use the Contact form with “Privacy request” in the message. Available rights and exceptions depend on applicable law and circumstances. This notice does not promise universal legal compliance.