Privacy Policy
This is the personal blog of Shawn Ng (“we”, “us”). This policy explains what data we collect when you visit https://shawnng.com, why we collect it, and the choices you have. We aim to collect as little as possible.
Summary
- We do not sell your data, and we do not run any tracking beyond what is described below.
- Our own analytics record your visits and the requests your browser makes to our API. If you are signed in to a member account, they are linked to that account through a pseudonymous ID. We use this to run and secure the site and to understand how it is used, never for advertising, and we never sell it.
- If you create a member account, we keep your account details and a record of your sign-ins so we can run the account and protect it from abuse.
- We show ads via Google AdSense. In the EEA, UK, and Switzerland we ask for your consent before personalized advertising cookies are used.
- We only email you if you ask us to, and you can unsubscribe at any time.
Analytics
We use Google Analytics to understand aggregate traffic (such as page views, referrers, and approximate geography). Google Analytics sets cookies and collects device identifiers and IP addresses on Google’s behalf; we see only aggregated reports and do not use analytics data to identify individual visitors. You can opt out with the Google Analytics opt-out browser add-on or by blocking analytics cookies in your browser.
We also run signallark, our own first-party analytics system, on infrastructure we control. For each visit it records the pages you view, the page that referred you, the query parameters in the page address (leaving out any that look like passwords or keys), your IP address, the approximate location derived from it (country, region, and city), the network it belongs to (including whether it is a known VPN or Tor exit), and your browser user-agent, from which it reads the browser, operating system, and device type. It sets no cookies. Visits are grouped by an identifier computed from your IP address and user-agent that changes every day, so on its own it cannot follow you from one day to the next, and it never follows you across other sites. This data is kept for up to two years. Nothing it collects is shared with a third party.
If you are signed in to a member account, the site also gives signallark a pseudonymous member ID: a one-way SHA-256 hash of your email address. It is not your email address, but it is the same for every visit you make while signed in, so it links those visits to your account over time. We use it to understand how members use the site and to protect accounts, as described in the next section, not for advertising.
Requests to our API
The pages of this site talk to our own API (the addresses under https://shawnng.com/api/), for example to check whether you are signed in, to sign you in, or to download a members-only file. We record each of these requests in signallark: which endpoint was called (never the full address, the query string, form contents, passwords, or cookies), the method, the result, and how long it took; whether the request came with a member or admin sign-in; the site of the page that made it; and your IP address, with the approximate location and network derived from it, and your user-agent. When you are signed in, the record carries the same pseudonymous member ID described above. These records are kept for 90 days.
We use them to operate and secure the site: to find errors and slow endpoints, and to compare where a member’s API requests come from with where that member usually browses from, so that a sign-in cookie used from somewhere unexpected stands out. That comparison is for our own review. It does not block anyone or make any automated decision about you.
Advertising
We use Google AdSense to display ads. Google and its partners may use cookies and similar technologies to serve ads and, with your consent, to personalize them based on your prior visits to this and other sites.
- In the EEA, UK, and Switzerland, we use a Google- certified consent management platform to ask for your consent before any personalized-advertising cookies are set. You can choose to consent, to refuse, or to manage your choices, and you can change your decision at any time via the consent controls on the site. If you refuse, you may still see non-personalized ads.
- You can review and control Google’s use of advertising cookies at Google My Ad Center and learn more in Google’s advertising policy. Google’s handling of data is governed by the Google Privacy Policy.
Mailing list
If you subscribe to updates, we collect your email address solely to notify you when a new post or video is published. You are added to the list as soon as you submit the form; we do not send a separate confirmation email. Every message we send carries a one-click unsubscribe link.
- Subscriber email addresses are stored and the notification emails are sent using Microsoft Azure (Azure Communication Services and Azure Table Storage).
- Every email includes a one-click unsubscribe link, and you can opt out at any time. When you unsubscribe, we remove your address from the active list.
- We never sell or share your email address, and we do not use it for anything other than these notifications.
Member accounts
You can create a free member account with your email address and a password, or by signing in with Google or Microsoft. For each account we keep:
- your email address and name (the first name you give on the sign-up form, or the first and last name your Google or Microsoft account provides), and the address of your Google profile photo if you signed in with Google;
- how you sign in. For a password account we keep only a salted hash of your password (scrypt), never the password itself;
- your membership plan and the date the account was created;
- a sign-in record: when you last signed in and were last active, how many times you have signed in, and the IP address, approximate location (where available), and user-agent of your most recent activity;
- details of the sign-up request itself (its IP address, user-agent, browser language, and country where available), kept unchanged as a record of how the account was created.
We use this to run your account, to keep you signed in, and to spot accounts created or used by automated scripts. If you tick the newsletter box when you create an account, your address is also added to the mailing list described above. Account data is stored in Microsoft Azure (Azure Table Storage) and kept for as long as the account exists. To delete your account and its data, email us at hello@shawnng.com; there is no self-service delete yet.
Hosting and server logs
The site is hosted on Microsoft Azure (Azure App Service), and DNS is managed through Cloudflare. Like most web hosts, these providers may process standard technical request data (such as your IP address and browser type) to deliver the site securely and to protect against abuse.
Cookies
We do not set our own tracking cookies. The cookies we set are strictly necessary: shawnng_member keeps you signed in to a member account (30 days), shawnng_admin keeps the site administrator signed in (one day), and shawnng_msoauth holds a Microsoft sign-in while it is in progress (10 minutes). The site also keeps a few things in your browser’s local storage so pages show the right state straight away: your colour theme and, when you are signed in, your member name, email address, and plan. Local storage never leaves your device. Other cookies come from Google Analytics and Google AdSense (for advertising, subject to your consent as described above) and, where applicable, from the tool that remembers your consent choice. signallark is cookieless.
Legal bases (EEA/UK)
Where the GDPR or UK GDPR applies, we rely on the following legal bases: consent for personalized advertising and for sending you mailing-list emails; performance of a contract for running your member account if you create one; and our legitimate interests in running, securing, and understanding use of the site. That last basis covers our first-party analytics and API request log, including the pseudonymous member ID and the location comparison described above, which we use to protect members’ accounts and not for advertising or marketing profiles. You can object to it by emailing us.
Your rights
Depending on where you live, you may have the right to access, correct, delete, or port your personal data, to object to or restrict its processing, and to withdraw consent at any time. To exercise any of these rights, email us at hello@shawnng.com. You also have the right to lodge a complaint with your local data protection authority.
International transfers
Some of our service providers (including Google, Microsoft, and Cloudflare) are based in or process data in the United States and other countries. Where personal data is transferred internationally, those providers rely on appropriate safeguards such as the EU Standard Contractual Clauses.
Children
This site is not directed to children, and we do not knowingly collect personal data from anyone under the age of 16.
Changes
We may update this policy from time to time. When we do, we will revise the “Last updated” date above. Material changes will be reflected on this page.
Contact
Questions about this policy or your data? Email hello@shawnng.com.