Spectral Web Services

@cathy.spectralwebservices.com.ap.brid.gy

Let our team handle the technology, while you focus on creating. Ghost CMS experts. 🌉 bridged from https://www.spectralwebservices.com/ on the fediverse by https://fed.brid.gy/

The illustrator who used to make my ghosts quit taking work, and it's killing me.

I really need to find a new illustrator

I really really don't like using AI to generate images. I'd rather pay an artist. But the awesome illustrator who made the ghosts that are all over this site isn't taking work any more (_sob_), and I don't currently have an Adobe subscription (making my .ai files useless anyway), and all I needed was to remove the pink background. Here's how it went. Source image. Cute, but pink. Very pink. So pink it's off-brand."I need the pink background removed." Look closely. That is NOT a transparent background. That's a bad grey checkerboard. Me: Is that transparent? (I'd already downloaded it and knew the answer.) Gemini: No, that image has a **checkerboard pattern baked into the image itself** rather than an actual transparent background (alpha channel). If you try to place that image over a colored background or graphic, the grey-and-white grid pattern will show up as part of the picture. Here is the image with a **true transparent PNG background** so you can easily place it anywhere: (there was no image) Me: That's a blank image. Gemini offered me a choice of two responses. One was an explanation of how it wasn't a blank image. (It still was.) The other was this: I mean, that's almost cute. I've had AI mangle my mascot worse than this. But... I didn't ask it to change the face. I just wanted the pink gone, remember? Me: A (that's the image above) is closer, but I want the image not changed - leave the Ghost's face alone. Gemini: What, are we playing "spot the five differences" today? Me: no. go back to the original image. Remove the pink background. Replace with white or transparent. Change nothing else. Good grief. Thank you. * * * Illustrator referrals would be appreciated right about now.

spectralwebservices.com

I’ve been calling my new events calendar embed “Calendar caddie” and picturing my usual ghost in a tam hat somehow schlepping calendar events (an illustration that presently exists only in my head). But… maybe I should really name it Haunts? As in… places you hang out? Decisions, decisions.

Got questions on our embeddable calendar? We have answers?

Calendar Caddie FAQ

_What? You haven't tried Calendar Caddie yet? Come on over to_ https://tools.spectralwebservices.com/_to get started!_ Calendar Caddie is a community events calendar app, built primarily for Ghost sites. It prioritizes using automation to obtain events, saving you time. #### Does it only work on Ghost? Ghost is my target market, but you can actually embed it anywhere you can embed html & javascript. For example, check out Stumptown Savings' calendar. That's Beehiiv. Small caveat: If you want to upload images for your calendar events, that requires Ghost (at least for now). You can put your images somewhere else and paste in links, or perhaps your feed items already have images (ideal). #### Can I take public submissions? Yes. Put the submissions embed on a separate page on your site, and configure Caddie (enable submissions and paste the link to that submissions page) to show the submit button. #### I get to approve public submissions, right? Definitely. Nothing goes live until you approve it. #### I have an event creator with a lot of events! Do they need to submit each one? If you trust them, the fastest and most-automated way to get the events into Caddie would be for them to create a calendar (i.e. a free Google Calendar) and give you the address of its public feed. Then their events could appear on your site, no approvals or manual work needed! #### Can I use Calendar Caddie for my own events only? Does it have to be a __community__ calendar? Sure! You can either manually create your events, or create a public calendar using any tool you like (i.e. Google calendar) and add its feed to Caddie. I generally think maintaining a calendar outside of Caddie is slightly easier than making Caddie the source of truth, but you can do either, and for a small number of events, it really doesn't matter. #### Why isn't the wizard working? I can see events on the website. Sometimes what looks to a human like a perfectly good list of events is actually a hand-built page with no structure that automation can read. [Note to the owners of these types of pages: If my automation can't read it, neither can Google's web crawler, and you're missing out on traffic as a result.] You can try the AI import tool (under "Custom" events) and paste in the contents of the page. It won't live update, but at least you'll get a static copy of their events. Caddie's current automated event retrieval doesn't use AI to parse page contents (exception: applying categories and deduplicating events). It relies on the site having a machine-readable structure. If AI whole page parsing is something you want, let's talk. It won't be a Caddie Lite/free offering, because it would require having an LLM check the page every night and assess whether any events listed had updates would be slow and token-intensive.

spectralwebservices.com

Sell access to Ghost-hosted content to university libraries, without making thousands of accounts or fussing with PII data.

Institutional access to Ghost now included with SWS Tools!

This is a Core+ feature for subscribers to Spectral Web Services Tools. Now available as part of your Spectral Web Services Tools subscription: IP-based institutional access! This is a great option for Ghost site owners who want to sell access to paywalled content to academic/university libraries, large companies, and other larger clients, where individual accounts are not needed or desirable. ## What to know: The institutional access is done by accessing Ghost as a paid user, and serving those paid-user results to anyone whose IP address matches a set of whitelisted IPs. Visitors from the institutional customer do not get separate accounts. They connect through their institution's proxy (from anywhere, if the institution has it set up that way), or by being at the institution and on their network. Ghost has no information about the institutional visitors. This is often desirable for universities, who won't want to share student data with you, while still wanting their students to get access. Because Ghost doesn't have institutional user data, the default setup does not support newsletter sign-ups. [But let me know if you need to make that possible. I've done it, it just isn't my default.] If your site uses Ghost's native comments, be aware that institutional visitors won't be able to comment (although comments can still be visible on the site if desired). Non-institutional users continue to access your site exactly as they do now. Nothing changes for them, and we don't proxy their requests. Institutional access services go through Cloudflare. We don't see user-noticeable changes in load time by adding the institutional access. Your site will still look great and load well! Your site management dashboard (_not part of Ghost_) gives you the ability to add or remove IP addresses, as well as (somewhat basic) logging of which institutions are visiting and what pages they're accessing. ## How it to get started: 🔮 Note: It isn't possible to set up this service through the tools website, since it the "first use" part needs some individualized setup. _Budget a business day or three_ to get it up and running on first use, after which you'll be able to onboard your own new customers. _First use:_ * Sign up for a tools subscription at the "Core" or higher tier. * Email Cathy with the desired subdomain to be used for institutional customers. (i.e. https://access.yourdomain.tld) * Add a couple of DNS records (with the directions we send you) * Create a Ghost user with complimentary access to the paywalled content. (Whatever tier you want to sell.) * Share your IP address, so that we can set you up for a test view. * Most sites need a small amount of proxy customization. We can take care of the following for you, or if your configuration needs are more expensive, we'll let you know if an additional setup fee is needed. Here's a list of common needs: * Hide account management buttons (theme-specific) * Add a visual indicator that institutional access is on (if desired). * Disable Portal and Outpost scripts for institutional users, since member management isn't relevant here. * Rewrite urls for Ghost's native search (default) or SWS search (on request) so that results correctly link to the institutional access site _For each new institutional subscription:_ * You handle billing for your institutional clients. (Most universities will want an invoice, forms, etc.) * Your institutional client tells you what IP ranges need access, and you enter those in your dashboard. If it's an academic library, ask them what proxy system they use for journals, and encourage them to use it for accessing your site. We have multiple institutional clients-of-clients using EZProxy, which works well and is easy to set up, but any proxy access system is fine. For other organizations, you could list their whole IP block, but it's often easier to manage a single proxy IP if they have one for other types of access already. * Your tell your institutional clients to access your site via the subdomain. They make some entries for it in their catalog and/or proxy system.

spectralwebservices.com

How to get your site's calendar populated and looking great!

Calendar Caddie part 1 (adding a source)

Want to get started with Calendar Caddie? Head on over to https://tools.spectralwebservices.com . ### How do I (the curator) get sources onto my calendar? * Our goal is to make calendar generation automatic. We want to read sources of community events and get them onto your calendar with minimal or no intervention on your part, _once configured_. But to do that, we have to find the sources! * You hopefully already know (or can do some research) to find out who puts on events in your area that you're interested in including. * Once you have some momentum and a well-filled calendar, remaining sources will (hopefully) start asking _you_ to include them. Thus, our initial goal is to get the calendar looking like a useful resource, to encourage additional sources to want to be included and to be cooperative in making their events accessible to Caddie, if they are not currently. * Some sources may be initially difficult or impossible. Start with the easy ones. ## Adding a source Use the auto tool! With luck, it will identify the source for you! ### What if the auto-tool can't identify and configure my source? * Sometimes, the human-visible calendar is not the best source (i.e. if a human built it by hand as unformatted – but pretty – text). If it's a high-value and high volume source, a little internet research to see where else their events appear may be worthwhile. Are the events also listed somewhere else? For example, are these events also in Ticketmaster, or a Meetup group, or Eventbrite? * If it's a low volume source, is it worth just adding their events by hand? If a source has two events per year, maybe you just add them using the event submission form, or maybe you maintain a Google calendar where you add any events you want to add, and you add that Google calendar as a source. (Adding events to Google calendar may be faster than submitting them via the form.) * Ask the source! * It's possible that they actually do have a readable feed that just isn't obvious or we just haven't found. * Or it's possible that whoever takes care of their website can turn on a readable feed with a couple clicks. Ask for an ICS feed. * If someone is regularly submitting events via the form, consider some outreach. It would be faster for them and MUCH faster for you if they put their events on a calendar and shared that calendar link with you. [This assumes you don't want to pre-approve their events.] * Events that fail the auto-tool can be submitted for further investigation. My priority will be sources with many events (because a single annual event can just be added manually) and sources that are going to be generally useful (i.e. a common CMS/calendar system used by many organizations that will help many curators). ### What happens after I add a source? You can trigger a refresh on your source. Changes are typically live in 2-10 minutes, depending on source type. Sources are checked for new and updated events once daily. (more to come!)

spectralwebservices.com

Another Spectral Web Services tool

How to connect your Ghost site to Apple News

Newly out in alpha over on the Spectral Web Services Tools for Ghost page: 🎉An Apple News integration! This one was a bear to build, because Apple News Format is its own thing, and although it sort of looks like HTML, it isn't. So I needed to translate every single Ghost card (and every single variant) into an Apple News component. You know how it always seems like it'd be nice to have just a few more cards built into the editor? There was a lot of swearing and not really feeling that. (I'm better now, and back to thinking it'd be super nice to have another half-dozen or so cards to give us more publishing options.) OK, enough whining, what's it do? ## Features * Triggered on post published event in Ghost, or manually. * Go straight to published, or save drafts for review later. * Configuration options for how it handles paywalled content, including publishing or protecting your members-only content. (Yes, it understands the preview line, too.) * Layout configuration options * Publish everything, or use tags to control what syndicates * Compatible with all Ghost cards (er... except HTML and Codepen) ### Caveats * It's in alpha. There might be bugs. 🐛 * The toggle card doesn't toggle - it starts open and stays there. (Apple News just can't do that.) Of course, it doesn't toggle in email, either! * Getting approved for Apple News distribution is a hurdle. I can get your content from Ghost to Apple News, but I can't promise they'll surface it once it gets there. That appears to be the hardest and slowest part, at this point. ## How to get an Apple News account ### Make your account 1. Read this first - if you aren't publishing news, stop here, go do something else. 2. Sign up for an account at icloud.com, if you don't already have one. Make sure 2FA is on. 3. Follow these instructions to get your channel id, key, and secret: https://support.apple.com/en-jo/guide/news-publisher/apd88c8447e6/1.0/icloud/1.0 4. Head over to the Apple News Integration page at https://tools.spectralwebservices.com/ . (Log in and set up your site if you haven't already.) In the Install tab, copy and paste in those values from step 3. 5. Publish something on Ghost! Or... head over to the Activity tab and manually publish some things. (Note, you need an Admin API key set up for your site before any of this will work.) 6. Your content should show up on the Tools > Apple News Integration > Activity tab within a minute or so, and then within your site's Apple news publisher page (accessible through iCloud.com) a minute or two after that. The activity tab gives you a direct link to the article which you can use on an Apple device to view the article directly. 7. Check out your articles using the direct link to each, or use the channel link (available in Apple News Publisher) to link directly to your channel. 8. Once you've got multiple articles published and looking great, you can request to have your site available to the public. Strangely, it appears that this form is the current mechanism for doing so. (Another option is having a contact at Apple News, being invited to apply, etc.) ## Help wanted! I would really appreciate hearing from you on whether this integration does what you need it to do, or if not, which knobs and settings are missing.

spectralwebservices.com

Because sometimes you need a quick way to stick a few sponsor messages on the page, without a ton of fuss

Introducing the Itty Bitty Ad Server for Ghost

Here's the latest tool launch for https://tools.spectralwebservices.com/ - an ad server for Ghost sites that just need to run a few local business ads. I've worked with lots of sites that just need to run a handful of locally-originated ads. Or sponsor messages. Either way, they don't need anything super complicated, but they do need to know how many impressions and clicks their ads got. ### What is it? An itty bitty ad server. If you want super fancy features and a huge learning curve, it might not be for you. If you just want to serve some sponsor messages/ads that you sell yourself, it might be just what you're looking for. As the video shows, if you have your ad images ready to go, you can get online and serving in about 12 minutes. ### Built in: * Responsive ad options - serve a mobile size cube on phones, banner on desktop * Ad analytics - track views and clicks, with 7day and 30day reporting. * Easy integration in Ghost. One copy-paste and you're done! * No theme edits needed. * Privacy! Your site visitors are not tracked. Seriously, ick. * Load your ad images and where they should link to, and you're ready to serve! * Fast loading. The itty bitty ad server code is about 7 kb zipped, and serves from Cloudflare. ### Not included: * Super detailed details on who saw your ad. (When you need geolocation and advanced analytics, you're ready for an advanced platform, not itty bitty ads.) * Bidding, 3rd party networks, payment collection. You don't need any of that for your first few locally-sourced ads/sponsorships * Waiting on someone to approve your site that isn't even live yet * Unexpected ads out of your control (ick) * Crazy steep learning curve. You can do this.

spectralwebservices.com

No, I'm not offering one. Here's why.

Contact forms?

A couple years ago, I got quite a long way into building a contact form builder. I got asked for contact forms regularly (and still do), and I thought building a builder was the way to go. I've changed my mind. ## Why I'm not offering a contact form builder * There are a lot of them already. The market is pretty flooded. * What's out there is already pretty good. I could roll out a basic one today (been there, done that for my own site a while back), but what's out there typically includes branching logic and such. Sure, I could build that, but it doesn't seem like a high-value activity. * Spam prevention is hard. Contact forms are vulnerable to all sorts of spammy submissions, bogus entries, and such. I'd rather let someone else deal with it! ## What I recommend: The TL;DR. * If you're already using another paid service that includes forms (Hubspot, Notion, Asana, AirTable, Moxie), those are worth investigating. If it gets submission data directly into your workflow, that's worth something, for sure! * I was pretty excited to get Form Robin at $19/once. I used that for a while, but I don't love the branding (and orange really doesn't go with my brand purple). And it's just not quite configurable enough. Maybe I don't want your form title in my embed, hmm? * My current go-to recommendation is Tally. Their free tier is enormous, their builder is nice, and although some customizations are locked behind their Pro tier, you can do a lot with what's in free. (I just wish they had the Arial font on their list.) Here's an affiliate link that will get you 50% off for three months, in the event that you decide you need their paid plan. 👉 Tally.so 👈 ## Let's see some forms in action, hmm? ⚠️ I've said it before, but here it goes again: JavaScript (including contact form javascript) doesn't work in email, nor in ActivityPub, so if you're reading on email or on Ghost's ActivityPub reader, you're going to need to hit the "read in browser" link at the top of the page to see what I'm talking about below. And... it's been 300-something days since Ghost 6.0 launched, with no way to control the visibility of content on ActivityPub specifically. [OK, ok, so technically I could hide this card on non-ActivityPub web by injecting some styles for normal web viewers, if I worked out which card this is on a page that might contain multiple cards. Apparently I'd rather point out the problem repeatedly.] Right. Sorry... on to some example forms! ### Moxie (Included with my $25/month plan, and not the reason I signed up.) Moxie is my current client portal/task tracker/time manager platform. Here's an example embed. Note that to make it look like this, I needed to add some css override to the layout: .v-application .pa-6 {padding: 0!important} .v-application .px-2 {padding-left: 0!important} I appreciate being able to inject my own css into the embed. But the problem I'm solving here is the obnoxious tendency of every form provider out there to include horizontal margins on their embedded form. No guys, I actually want my form aligned with the content around it. And I don't love overriding .px-2. It doesn't appear to break anything, but it looks general enough that I worry I've missed something. * * * ### Form Robin (Purchased for $19/once on App Sumo) I wanted to love it, since it was buy once and use forever. But, I don't? I used it for a while anyway. My biggest complaint is that I can't remove the title, which makes it much more obviously an embed, instead of part of the host page. Then there's the goofy margins. Out of the box, it uses 102px of combined margin and padding. I can override that like this: <style>iframe {margin-left: -102px;}</style> But then it's broken on mobile, so instead I'd need to sort out what their breakpoints and set margins for each, I guess? I looked. It was complicated. No thanks. There's also no control over the big whitespace below it and their branding is _not_ subtle. (Might be fine as the last element on the page, but it's annoying me here. The one thing I really like about Form Robin is the small notes below each form label. Those are nice. I tried to replicate them in Tally, but I don't have size control for them, at least not on the free plan. * * * ### Tally.so (Affiliate link, but you don't need a paid plan.) I'm able to turn off the title (yay!), and the padding is _almost_ right when I choose to left align the content, and the padding situation is consistent on all screens so that I can just add some negative margin: <style> iframe[data-tally-src] {margin-left: -8px!important;} </style> I don't love the branding, but I don't hate it to the tune of $29/month, either. * * * And there you have it. Today's thoughts on contact forms. Additional contact form provider recommendations are welcome in the comments, but spammy nonsense will be removed. If you're going to recommend something, please include cost and submission limits for that cost. Thanks!

spectralwebservices.com

Need a popup on Ghost? For free, no tracking, no ads, no branding? Yeah, we got you.

Meet the Spectral Web Services Popup tool

I built a thing! Another thing! Well, it's all the same thing; it's the tools collection over at https://tools.spectralwebservices.com. Today, I'm pleased to introduce you to my popup tool for Ghost. #### Some backstory... I've deployed a lot of popups for clients. The commercial options, frankly, sort of sucked. But just dropping some extra JavaScript into the theme didn't make it easy for clients to maintain. First, I thought I'd store most of the popup content on Ghost, as pages, and pull the content with the content API. That was OK, but it meant that the settings were in the tool, the buttons were in the tool, but the content was in a couple of Ghost pages. Confusing! So now, everything is in the popup builder. I think it works pretty well. The old method is still supported, at least for v4, but if you're building a new popup, use the 'built-in' option. It's less fussy! I set out to build something simple. Then people kept asking for more options, more power, more control. So many options! Sometimes, with great power comes great complexity. I've spent a lot of time trying to make it possible for you to have great control of your popups, without needing a Ph. D. to configure them. I welcome your feedback on how I did. The other thing that delayed launch for the popups was that I kept thinking up configuration settings and layouts I wanted. How'd I do? Don't worry, the buttons will match YOUR site, not mine. Ready to see it in action?

spectralwebservices.com