Developer Q&A: Dika Fei of Jelly Pixel Studio

Dika Fei, like most founders, had a couple ideas that failed before hitting just the right note when he started his web development company, Jelly Pixel Studio. With a team of seven, Jelly Pixel Studio specializes in crafting unique and illustrative websites for a variety of clients worldwide. 

I had the chance to talk with Dika about why he loves WordPress.com, a few of his favorite tools, and examples of projects he’s most proud of. 

If Dika’s high praise convinces you to give WordPress.com another look, you can learn more about our specs and get started at WordPress.com/hosting

Jelly Pixel’s team. Dika is second from left, with the “peace” sign.

1. How long have you been working with WordPress and WordPress.com?

I’ve been working with WordPress for about 10 years now. When I first started, it was a bit like jumping into a lake and hoping there were no crocodiles! Back then, it wasn’t as obvious which CMS to choose. Joomla and Drupal were still pretty big, and it wasn’t clear that WordPress would be the best option. But we chose WordPress because it seemed more straightforward, and I’m so glad we made that decision. It was the right one. 

2. What do you like most about using WordPress.com for your clients?

If I knew nothing about it, I’d say WordPress.com works like magic! The uptime of websites on WordPress.com is often 100%, which really surprised me, especially compared to other hosting servers. It’s incredibly stable and scalable at a price point that’s hard to beat. 

Jelly Pixel is also part of Automattic for Agencies, and it’s impressive how the system scales, like running 10 CPUs that can go up to 100 when needed.

It’s a true “set it and forget it” experience in the WordPress industry. Let me know where you get your magic pixie dust from! 

3. What are your favorite tools or themes to use in your projects?

I love using GeneratePress and Advanced Custom Fields (ACF). 

GeneratePress is a lightweight theme that supports different approaches to web development, including full site editing. It’s a great starter theme for developers. 

Advanced Custom Fields is a well-known plugin, and I particularly appreciate how it now allows you to create Gutenberg blocks easily, handling the backend UI for you.

4. What recent WordPress features or updates are you excited about?

I’m really excited about the Interactivity API enabling more dynamic and interactive site features, akin to what we see with React. It’s still in its early days, but I think we’ll see more adoption soon.

5. What’s most important to you when building a WordPress site?

Stability and security are my top priorities. One of the biggest factors there is having a secure hosting environment. Many security issues come from improperly configured hosting, but with WordPress.com, you don’t have to worry about that. The secure server setup handles every vulnerability for you, which is a huge relief.

6. Can you share a few of your favorite client sites? Why do they stand out to you?

Screenshot

Ambient Lounge Japan, for its amazing product customization feature.

Workprint LA, for its overall design.

CNIB Access Labs, as a fully accessible and beautifully designed site. 

Get started at WordPress.com today

Beyond our customization options and extensability, what keeps Dika Fei and Jelly Pixel Studio using WordPress.com are our rock-solid security and performance specs. Those foundational aspects of developing and hosting sites can get overlooked amidst glitzy marketing campaigns. If you’re as impressed with our uptime as Dika, get started building today: 

Could you host DjangoCon Europe 2026? Call for organizers

We are looking for the next group of organizers to own and lead the 2026 DjangoCon Europe conference. Could your town – or your football stadium, circus tent, private island or city hall – host this wonderful community event?

DjangoCon Europe is a major pillar of the Django community, as people from across the world meet and share. This includes many qualities that make it a unique event – unconventional and conventional venues, creative happenings, a feast of talks and a dedication to inclusion and diversity.

Hosting a DjangoCon is an ambitious undertaking. It’s hard work, but each year it has been successfully run by a team of community volunteers, not all of whom have had previous experience – more important is enthusiasm, organizational skills, the ability to plan and manage budgets, time and people – and plenty of time to invest in the project.

For 2026, we want to kickstart the organization much earlier than in previous years to allow more flexibility for the organizing team, and open up more opportunities for support from our DjangoCon Europe support working group.

Step 1: Submit your expression of interest

If you’re considering organizing DjangoCon Europe (🙌 great!), fill in our DjangoCon Europe 2026 expression of interest form with your contact details. No need to fill in all the information at this stage if you don’t have it all already, we’ll reach out and help you figure it out.

Express your interest in organizing

Step 2: We’re here to help!

We’ve set up a DjangoCon Europe support working group of previous organizers that you can reach out to with questions about organizing and running a DjangoCon Europe.

The group will be in touch with everyone submitting the expression of interest form, or you can reach out to them directly: [email protected]

We’d love to hear from you as soon as possible, so your proposal can be finalized and sent to the DSF board by October 6th 2024. The selected hosts will be publicly announced at DjangoCon Europe 2025 by the current organizers.

Step 3: Submitting the proposal

The more detailed and complete your final proposal is, the better. Basic details include:

Organizing committee members: You won’t have a full team yet, probably, naming just some core team members is enough.
The legal entity that is intended to run the conference: Even if the entity does not exist yet, please share how you are planning to set it up.
Dates: See “What dates are possible in 2026?” below. We must avoid conflicts with major holidays, EuroPython, DjangoCon US, and PyCon US.
Venue(s), including size, number of possible attendees, pictures, accessibility concerns, catering, etc.
Transport links and accommodation: Can your venue be reached by international travelers?
Budgets and ticket prices: Talk to the DjangoCon Europe Support group to get help with this, including information on past event budgets.

We also like to see:

Timelines
Pictures
Plans for online participation, and other ways to make the event more inclusive and reduce its environmental footprint
Draft agreements with providers
Alternatives you have considered

Have a look at our proposed (draft, feedback welcome) DjangoCon Europe 2026 Licensing Agreement for the fine print on contractual requirements and involvement of the Django Software Foundation.

Submit your completed proposal by October 6th 2024 via our DjangoCon Europe 2026 expression of interest form, this time filling in as many fields as possible. We look forward to reviewing great proposals that continue the excellence the whole community associates with DjangoCon Europe.

Q&A

Can I organize a conference alone?

We strongly recommend that a team of people submit an application.

I/we don’t have a legal entity yet, is that a problem?

Depending on your jurisdiction, this is usually not a problem. But please share your plans about the entity you will use or form in your application.

Do I/we need experience with organizing conferences?

The support group is here to help you succeed. From experience, we know that many core groups of 2-3 people have been able to run a DjangoCon with guidance from previous organizers and help from volunteers.

What is required in order to announce an event?

Ultimately, a contract with the venue confirming the dates is crucial, since announcing a conference makes people book calendars, holidays, buy transportation and accommodation etc. This, however, would only be relevant after the DSF board has concluded the application process. Naturally, the application itself cannot contain any guarantees, but it’s good to check concrete dates with your venues to ensure they are actually open and currently available, before suggesting these dates in the application.

Do we have to do everything ourselves?

No. You will definitely be offered lots of help by the community. Typically, conference organizers will divide responsibilities into different teams, making it possible for more volunteers to join. Local organizers are free to choose which areas they want to invite the community to help out with, and a call will go out through a blog post announcement on djangoproject.com and social media.

What kind of support can we expect from the Django Software Foundation?

The DSF regularly provides grant funding to DjangoCon organizers, to the extent of $6,000 in recent editions. We also offer support via specific working groups:

The dedicated DjangoCon Europe support working group.
The social media working group can help you promote the event.
The Code of Conduct working group works with all event organizers.

In addition, a lot of Individual Members of the DSF regularly volunteer at community events. If your team aren’t Individual Members, we can reach out to them on your behalf to find volunteers.

What dates are possible in 2026?

For 2026, DjangoCon Europe should happen between January 5th and April 27th, or June 4th and June 28th. This is to avoid the following community events’ provisional dates:

PyCon US 2026: May 2026
EuroPython 2026: July 2026
DjangoCon US 2026: September – October 2026
DjangoCon Africa 2026: August – September 2026

We also want to avoid the following holidays:

New Year’s Day: Wednesday 1st January 2026
Chinese New Year: Tuesday 17th February 2026
Eid Al-Fitr: Friday 20th March 2026
Passover: Wednesday 1st – Thursday 9th April 2026
Easter: Sunday 5th April 2026
Eid Al-Adha: Tuesday 26th – Friday 29th May 2026
Rosh Hashanah: Friday 11th – Sunday 13th September 2026
Yom Kippur: Sunday 20th – Monday 21st September 2026

What cities or countries are possible?

Any city in Europe. This can be a city or country where DjangoCon Europe has happened in the past (Vigo, Edinburgh, Porto, Copenhagen, Heidelberg, Florence, Budapest, Cardiff, Toulon, Warsaw, Zurich, Amsterdam, Berlin), or a new locale.

References

Past calls

Interested in organizing DjangoCon Europe 2016?
Could you host DjangoCon Europe 2017?
DjangoCon Europe 2019 – where will it be?
Could you host DjangoCon Europe 2023?
Last Chance for a DjangoCon Europe 2023

Hot Off the Press: New WordPress.com Themes for August 2024

The WordPress.com team is always working on new design ideas to bring your website to life. Check out the latest themes in our library, including great options for dog lovers, engaged couples, and interior design aficionados.

Bark

Bark is a pawsitively perfect theme for pet care pros, striking the perfect balance between professional and playful. With sections tailored to showcase your services, testimonials, and even a map of your service areas, Bark helps make your business the leader of the pack. The typography adds a touch of modern charm, while the warm color palette and rounded corners brings comfort to every page. And with four color schemes available, Bark has all the tricks to make your site fetch some serious attention.

Click here to view a demo of this theme.

Vows

Vows is the perfect theme for engaged couples who want to tie everything together in style. Inspired by the timeless elegance of wedding stationery and photography, Vows acts as a sleek, all-in-one link hub, making it easy to coordinate your big day. From centralizing information to sharing event details and visual themes, this theme does it all with grace. With sophisticated font pairings and style variations, Vows sets the perfect tone for your celebration.

Click here to view a demo of this theme.

Cottage

Cottage is the perfect theme for anyone who wants to share the warmth and charm of their home or interior design sensibilities with the world. Inspired by the cottagecore aesthetic, this theme wraps your content in an earthy, cozy color palette that feels like a warm cup of tea on a rainy day. With a stunning gallery page to showcase your space and a delightful background pattern that adds a touch of whimsy, this will be your go-to design for all things homey and beautiful. Whether you’re blogging about decor or sharing your latest design inspiration, Cottage makes your site feel like home.

Click here to view a demo of this theme.

Hola

Hola was built for bloggers and newsletter creators who want their words to shine. A sleek variation of the Hey theme, Hola keeps it simple with a text-forward design that highlights your latest posts in a clean, straightforward layout. The striking header is created by adding a black-and-white image to a Cover Block with a preset duotone—an effect also applied to featured images, avatars, and the site logo.

The theme’s expanded color palette and four unique style variations bring a bit of personality to the mix, whether you’re vibing with cool blues, the vibrant magenta, or earthy tones. No matter your aesthetic, Hola offers a minimalist canvas with just the right pop of flair.

Click here to view a demo of this theme.

To install any of the above themes, click the name of the theme you like, which brings you right to the installation page. Then click the “Activate this design” button. You can also click “Open live demo,” which brings up a clickable, scrollable version of the theme for you to preview.

Premium themes are available to use at no extra charge for customers on the Personal plan or above. Partner themes are third-party products that can be purchased for $99/year each on the Business plan and above.

You can explore all of our themes by navigating to the “Themes” page, which is found under “Appearance” in the left-side menu of your WordPress.com dashboard. Or you can click below:

The Fediverse Files: The Magic of Federation

Remember when commenting on blogs and interacting with other commenters was one of the core pieces of enjoying the web? Matthias Pfefferle is making commenting cool again with ActivityPub for WordPress, a plugin that seamlessly connects your WordPress website to the fediverse. 

In this interview, Doc Pop and Matthias talk about fediverse applications that apply beyond social media—and where the ActivityPub protocol can go in the future. 

Will you be one of those people? Federate your website today and get 25% off a WordPress.com Business or Commerce hosting plan by using coupon code federate25—or click below:

Building Studio in Public: Maintaining High Performance in Our Local Development App for Enhanced UX

We’re back with Part 2 of our “Building Studio in Public” series! Today, we’re diving into the challenges we faced while optimizing Studio’s performance. This post will be especially valuable if you’re developing an Electron app and dealing with performance issues or if you’re simply curious about how the Studio app functions behind the scenes.

If you’re following the series, be sure to check out our first post: Using WordPress Components and Tailwind CSS in our Local Development App.

As a reminder, Studio is our free, open source local development app. It’s based on Electron (the focus of today’s post!) and is currently available for Mac and Windows.

Overcoming the challenges of running local development sites

Running a local development site can be complex, often requiring the setup of multiple tools. A typical approach involves using multi-container applications like Docker and Docker Compose in addition to setting up a web server with a WordPress installation and a MySQL database. This process can become even more challenging when managing multiple sites simultaneously.

Studio was designed to simplify this process, allowing users to set up sites quickly without any prior configuration. This capability is powered primarily by the WordPress Playground project, which enables anyone to run a fully functional WordPress site within a browser or Node.js environment. 

For each site created with Studio, we run a basic web server using ExpressJS to handle web requests and use WordPress Playground to process them.

Initially, this was implemented in the Electron-based Studio app without noticeable performance issues.

However, as we expanded our testing across Mac and Windows, we observed some slowness in UI interactions when managing and navigating sites. Everything seemed properly configured, but something was clearly off.

Keeping the main process lightweight

As we delved into these performance issues, we discovered that running sites within Electron’s main process was the primary cause of the slowdown. Processing web requests and executing the associated PHP code for WordPress in the main process added extra load, which negatively impacted other operations, aka that UI slowness we were seeing.

Electron’s documentation is incredibly valuable for addressing performance issues, particularly those related to blocking the main process. It was clear that maintaining a lightweight main process is crucial, and avoiding heavy or blocking operations in this context is essential. However, this realization presented a new challenge: how do we detach the running sites from the main process?

Spawning dedicated processes

To tackle the performance issues, we adopted the tried-and-true strategy of “divide and conquer.” 

The idea was to run Studio’s sites in dedicated processes, separate from the main one. Since Electron is built on Node.js, spawning child processes seemed like a plausible solution. However, Electron also offers a utilityProcess utility, which behaves similarly to Node’s child processes, but operating at the browser level and aligning more closely with Electron’s app model.

While this approach promised to alleviate the load on the main process, it also introduced additional complexity. We had to manage these new processes and handle communication between the main and dedicated processes via messages. Additionally, we encountered challenges related to the build configuration and using Webpack for building the application.

Below is a full example of implementing this approach (click to expand each example to see the full code):

Dedicated Process Manager (process.js):

const { app, utilityProcess } = require( ‘electron’ );

// This path should be calculated dynamically as the file could be in
// different locations depending on the build configuration
const PROCESS_MODULE_PATH = ‘./process-child.js’;

const DEFAULT_RESPONSE_TIMEOUT = 120000;

class Process {
lastMessageId = 0;
process;
ongoingMessages = {};

async init() {
return new Promise( ( resolve, reject ) => {
const spawnListener = async () => {
// Removing exit listener as we only need it upon starting
this.process?.off( ‘exit’, exitListener );
resolve();
};
const exitListener = ( code ) => {
if ( code !== 0 ) {
reject( new Error( `process exited with code ${ code } upon starting` ) );
}
};

this.process = utilityProcess
.fork( PROCESS_MODULE_PATH, [], {
serviceName: ‘dedicated-process’,
env: {
…process.env,
IN_CHILD_PROCESS: ‘true’,
APP_NAME: app.name,
// Note that Electron context won’t be available in the dedicated process.
// Add here other environment variables that might be needed.
},
} )
.on( ‘spawn’, spawnListener )
.on( ‘exit’, exitListener );
} );
}

// This is an example function. Feel free to add more for other purposes.
async exampleFunc( command, args ) {
const message = ‘exampleFunc’;
const messageId = this.sendMessage( message, { command, args } );
return await this.waitForResponse( message, messageId );
}

// It’s important to keep in mind that the process will be running
// until it’s explicitly stopped.
async stop() {
await this.killProcess();
}

sendMessage( message, data ) {
const process = this.process;
if ( ! process ) {
throw Error( ‘The process is not running’ );
}

const messageId = this.lastMessageId++;
process.postMessage( { message, messageId, data } );
return messageId;
}

async waitForResponse( originalMessage, originalMessageId, timeout = DEFAULT_RESPONSE_TIMEOUT ) {
const process = this.process;
if ( ! process ) {
throw Error( ‘The process is not running’ );
}
if ( this.ongoingMessages[ originalMessageId ] ) {
throw Error(
`The ‘waitForResponse’ function was already called for message ID ${ originalMessageId } from the message ‘${ originalMessage }’. ‘waitForResponse’ may only be called once per message ID.`
);
}

return new Promise( ( resolve, reject ) => {
const handler = ( { message, messageId, data, error } ) => {
if ( message !== originalMessage || messageId !== originalMessageId ) {
return;
}
process.removeListener( ‘message’, handler );
clearTimeout( timeoutId );
delete this.ongoingMessages[ originalMessageId ];
if ( typeof error !== ‘undefined’ ) {
console.error( error );
reject( new Error( error ) );
return;
}
resolve( data );
};

const timeoutHandler = () => {
reject( new Error( `Request for message ${ originalMessage } timed out` ) );
process.removeListener( ‘message’, handler );
};
const timeoutId = setTimeout( timeoutHandler, timeout );
const cancelHandler = () => {
clearTimeout( timeoutId );
reject( {
error: new Error( `Request for message ${ originalMessage } was canceled` ),
canceled: true,
} );
process.removeListener( ‘message’, handler );
};
this.ongoingMessages[ originalMessageId ] = { cancelHandler };

process.addListener( ‘message’, handler );
} );
}

async killProcess() {
const process = this.process;
if ( ! process ) {
throw Error( ‘The process is not running’ );
}

this.cancelOngoingMessages();

return new Promise( ( resolve, reject ) => {
process.once( ‘exit’, ( code ) => {
if ( code !== 0 ) {
reject( new Error( `Process exited with code ${ code } upon stopping` ) );
return;
}
resolve();
} );
process.kill();
} ).catch( ( error ) => {
console.error( error );
} );
}

cancelOngoingMessages() {
Object.values( this.ongoingMessages ).forEach( ( { cancelHandler } ) => {
cancelHandler();
} );
}
}

module.exports = Process;

Dedicated Process Logic (process-child.js):

// Replace with initial setup logic based on the environment variables if needed.
console.log( `Run initial setup for app: ${ process.env.APP_NAME }` );

const handlers = {
exampleFunc: createHandler( exampleFunc ),
};

async function exampleFunc( data ) {
const { command, args } = data;
// Replace this with the desired logic.
console.log( `Run heavy operation ${ command } with args: ${ args }` );
}

function createHandler( handler ) {
return async ( message, messageId, data ) => {
try {
const response = await handler( data );
process.parentPort.postMessage( {
message,
messageId,
data: response,
} );
} catch ( error ) {
process.parentPort.postMessage( {
message,
messageId,
error: error?.message || ‘Unknown Error’,
} );
}
};
}

process.parentPort.on( ‘message’, async ( { data: messagePayload } ) => {
const { message, messageId, data } = messagePayload;
const handler = handlers[ message ];
if ( ! handler ) {
process.parentPort.postMessage( {
message,
messageId,
error: Error( `No handler defined for message ‘${ message }’` ),
} );
return;
}
await handler( message, messageId, data );
} );

Run example (main.js):

async function runExample() {
const process = new Process();
await process.init();
await process.exampleFunc( ‘my-command’, [ ‘example’, 100 ] );
}


app.whenReady().then( () => {
runExample();
} );

Note: The code above has been adapted for use in a generic example Electron project. You can test it using Electron Fiddle.

Build configuration and Webpack

Our project build setup relies on Forge and Webpack. Implementing dedicated processes introduced extra complexity, as we initially bundled all the code into a single file. 

However, since dedicated processes require their code to run in isolation from the main process, we needed to separate the bundles. After adjusting the Webpack configuration, we successfully set it up to produce the necessary files.

Below is an example of the changes we applied (click to expand each example to see the full code):

Before:

import { type Configuration } from ‘webpack’;

export const mainConfig: Configuration = {
// This is the main entry point for your application, it’s the first file
// that runs in the main process.
entry: ‘./src/index.ts’,

After:

import path from ‘path’;
import { type Configuration, DefinePlugin } from ‘webpack’;

// Extra entries are bundled separately from the main bundle. They are primarily used
// for worker threads and forked processes, which need to be loaded independently.
const extraEntries = [
{
name: ‘siteServerProcess’,
path: ‘./src/lib/site-server-process-child.ts’,
exportName: ‘SITE_SERVER_PROCESS_MODULE_PATH’,
},
// Here you can configure other dedicated processes
];

export default function mainConfig( _env: unknown, args: Record< string, unknown > ) {
const isProduction = args.mode === ‘production’;

// Generates the necessary plugins to expose the module path of extra entries.
const definePlugins = extraEntries.map( ( entry ) => {
// The path calculation is based on how the Forge’s webpack plugin generates the path for Electron files.
// Reference: https://github.com/electron/forge/blob/b298b2967bdc79bdc4e09681ea1ccc46a371635a/packages/plugin/webpack/src/WebpackConfig.ts#L113-L140
const modulePath = isProduction
? `require(‘path’).resolve(__dirname, ‘..’, ‘main’, ‘${ entry.name }.js’)`
: JSON.stringify( path.resolve( __dirname, `.webpack/main/${ entry.name }.js` ) );
return new DefinePlugin( {
[ entry.exportName ]: modulePath,
} );
} );

return {
…mainBaseConfig,
plugins: [ …( mainBaseConfig.plugins || [] ), …definePlugins ],
};
}

export const mainBaseConfig: Configuration = {
entry: {
// This is the main entry point for your application, it’s the first file
// that runs in the main process.
index: ‘./src/index.ts’,
// Inject extra entries into the Webpack configuration.
// These entries are primarily used for worker threads and forked processes.
…extraEntries.reduce( ( accum, entry ) => {
return { …accum, [ entry.name ]: entry.path };
}, {} ),
},

Note: The code above is directly from Studio, written in TypeScript.

Bonus tip: avoid blocking file system operations

We also noticed performance issues when using synchronous file system operations when building Studio, specifically when using the synchronous versions of functions, which can block the main process. To prevent this, it’s best to use the promise-based or callback versions of these functions.

For example, instead of using:

fs.readFileSync( path, ‘utf8’ );

Use:

await fs.readFile( path, ‘utf8’ );

Ready to build?

If this information has piqued your interest, or if you’re developing WordPress sites, start leveraging the power of Studio today. It’s free, it’s open source, and it seamlessly integrates into your development workflow.

After downloading Studio, connect it to your WordPress.com account (free or paid) to unlock features like Demo Sites.

Want to contribute to Studio? Here are some GitHub issues you can dive into:

php_curl missing and curl_exec deactivated

Total and free size of filesystem reported in sites doesn’t match actual values 

Permission issues using a theme that uses composer

The Fediverse Files: Making Social Media Fun Again

In this episode of the Fediverse Files, ‪‪Doc Pop talks with Bart Decrem, the co-creator of Mammoth, an open source Mastodon app for iOS.

Doc and Bart discuss how the walled gardens of modern social media platforms are finally getting some real competition from a better, and more open social web. The rise of the fediverse signals a return to the original promise of the web: that anyone can find a home, their own place on the internet, and connect with whomever they want without getting trapped in a single platform. 

Whether it’s through a newsletter, a podcast, or a publisher’s website, Bart’s goal is to get a million websites and a hundred million people onto the fediverse.

Will you be one of those people? Federate your website today and get 25% off a WordPress.com Business or Commerce hosting plan by using coupon code federate25—or click below:

How We Built It: Beeper’s New Blog

Automattic recently welcomed Beeper, an all-in-one messaging app, to our umbrella of life-improving apps. (If you haven’t yet, check out Day One, Pocket Casts, and Tumblr, too!)  

Since Beeper joined a company best known for its world-class WordPress hosting and plugin solutions, we knew our special projects crew would love creating a shiny new blog for the messaging team. 

With blog.beeper.com, our team showed off what can be quickly done with a minimalist framework. In this post, we’ll give you a short tour of the new site, including some design inspiration as well as before and after shots. 

Take a look at Beeper’s new blog and remember to download the app today on iOS, Android, or desktop. 

Maintaining Beeper’s clean and colorful aesthetic

Beeper’s design sensibility has always been fun and playful, featuring a blue-purple color palette, simple icons, and friendly imagery and messaging. We knew we didn’t need to reinvent the wheel on that front, so we maintained the overall aesthetic while giving the new blog a clean background that’s ideal for reading and absorbing content. The Beeper homepage, in comparison, offers a colorful, sparkly background that’s perfect for immediately drawing in visitors. 

Rather than complicate the design with a noisy layout, the team quickly decided that a one-column, minimalist structure using the popular Livro theme would be best for this project. The only custom flourish we’ve added is a simplified “Featured” section that the Beeper team controls and edits.     

Breaking free of Substack’s constraints  

Beeper’s old blog at Substack is shown on the left, and at WordPress.com on the right. The first iteration of Beeper’s new blog didn’t include the featured section at the top. With WordPress, a design can always be reimagined and improved, even after launch day.

We transferred Beeper’s 7,000+ subscribers and all their archived content from Substack to WordPress.com. Our system beautifully handled those moving pieces and even ensured that all the links worked properly at their new home. 

Moving Beeper off of Substack and onto WordPress made this project unique for our team. Along the way, we realized some of Substack’s constraints, like styling and layout restrictions, and were glad to be able to move beyond them.

On the design front, for example, Beeper appreciated having more freedom than Substack’s pre-built, busy-looking magazine layout. And while there was some customization available, little details like the “Subscribe” box or even a “Download” button couldn’t be styled with Beeper’s branding aesthetic. These details do a lot to present a distinct and cohesive message. 

While it’s a subjective measure, we’re comfortable in saying the new design just feels better and more authentic to Beeper. 

Start using WordPress.com today 

If you’re impressed by what our team did with Beeper’s blog, consider moving your blog or newsletter to WordPress.com today. With our convenient importer tool, you can click a button, sit back, and dream about just how high your content can fly when not constrained by a platform’s built-in limitations. 

And if you’re curious about using WordPress.com to build sites for your clients, click below to learn more about our world-class hosting and development features:

Move to WordPress.com, and We’ll Handle the Migration for Free

If your WordPress website is hosted somewhere other than WordPress.com, we’d love for you to ask one simple question: Why? 

Maybe you started there because of a stellar pricing deal on hosting and just stayed put for years. Maybe their offering was cutting-edge at one time, but now it seems outdated. Are all those paid add-ons starting to look a little bloated? 

The WordPress.com of 2024 is vastly reimagined from what you may have encountered a couple of years ago. Our SEO tools, security features, unlimited bandwidth, and developer tools are world-class and built right in at no extra cost. 

And for a limited time, we’ll move your existing WordPress site from any host to WordPress.com for free

Let us do the work for you. We’re here to help and ensure that you’re getting the very best WordPress experience out of the box. 

How it works

The migration process takes only a few minutes, with no downtime involved. (Read those last four words again, because they’re very important!) Once your site is migrated, you’ll connect the domain and your site will be ready to go. Here’s how it works:

Head to WordPress.com/move and enter the URL of the WordPress site to migrate.

Select the option to create a new site, or select the existing WordPress.com site where you’ll move the old site to. 

Select “Migrate site” to move all of your site’s content, themes, plugins, users, and customizations. (This selection requires our Business plan. More on that below.)

Select “Do it for me” to get our team to review and handle your migration for you. Again, this option is 100% free for a limited time. 

Why move to WordPress.com?

Migrating to WordPress.com enhances your entire online presence with better security, improved performance, unlimited visitors and bandwidth, and reliable support. Here are some of the benefits:

Rock solid reliability: With a 99.999% uptime guarantee, your site will always be available, fostering more trust, sales, and peace of mind.

Blazing fast performance: Our 28+ location CDN ensures your site loads at lightning speed, leading to happier users and higher conversion rates. Plus, WordPress.com is the top WordPress hosting provider per Google’s Core Web Vitals.

Top-tier security: Our advanced protection measures keep your site safe from hacks and DDoS attacks, protecting both your business and your customers.

Always up-to-date: You’ll always have the latest WordPress, PHP, and plugins, complete with new features and security updates.

Complete control and customization: Use our extensive library of themes and design customization options to create a site that truly reflects your brand.

Scalability and support: Ready to grow? We’ve got your back with advanced scaling to handle traffic spikes at no added cost. Plus, our managed hosting means we take care of updates and maintenance, allowing you to focus on what you love.

Get all of this and more by choosing the hosting platform built from the ground up by WordPress Core’s biggest contributors: WordPress.com.

The best place to WordPress

Our Business plan supercharges your WordPress website with plugins, third-party (or custom) themes, and everything else you need to host a professional website:

Plugins: Access over 50,000 plugins or upload/build your own.

Third-party themes: Upload any WordPress theme or custom design.

SEO tools: Access advanced SEO options and install plugins like Yoast Premium.

Custom code: Add custom JavaScript, iframe, and header code for services like Google Adsense and Mailchimp.

Backups: Ensure site safety with daily backups and easy one-click restorations.

Uninterrupted performance: Improve user experience and load times with our multi-data center support, real-time replication, and global caching.

Enhanced security: Use Jetpack Scan for malware and security threats.

Advanced developer features: Use the development tools you know, love, and rely on like staging sites, WP-CLI, GitHub deployments, SFTP/SSH, database access, PHP version switching, and more.

How do those features translate to a better experience for you? Here’s what Michael P. had to say about the experience of migrating to WordPress.com::

“After migrating to WordPress.com our site is faster, easier to use, more secure, and technical support is nearly instant. The level of competency and understanding is a far cry from GoDaddy’s WordPress offering. It was a relief to work with a company that really knows how to manage WordPress!”

Want to migrate three (or more) sites?

For those of you who are managing multiple sites for others, our new Automattic for Agencies program may be a good fit for you. 

Through Automattic for Agencies, you can access agency pricing, referral earnings, premier support, and cutting‑edge tooling like WordPress.com, WooCommerce, Jetpack, and more. Joining is free, and signing up today will grant you early access and provide you the opportunity to shape the program.

Make the move

Being part of Automattic, the primary driver of the WordPress project, we are a uniquely positioned host to the core software development. Our commitment to the open-source community is unparalleled, with substantial engineering time and expertise dedicated to enhancing WordPress. As a WordPress.com customer, you directly benefit from this relationship through exceptional reliability, early access to innovative features, and support from the most skilled systems team in the industry.

Move your site to WordPress.com today, for free.