Both options below load the briefing by themselves, so the code you install never has to change again. Each one prints two paragraphs: the current TESOL news paragraph, then the opening paragraph of the newest teach-abroad guide with a link to the full piece on atesol.ai. The headline and Article structured data come from the portal as well.
PHP file (recommended for americantesol.com)
Save this as ati-tesol-updates.php in your web root. The briefing is printed into the page on the server, so search engines read it in the page source, and the file keeps working on its own.
Then paste this single line into the page where the briefing should appear:
<?php include $_SERVER['DOCUMENT_ROOT'] . '/ati-tesol-updates.php'; ?>
<?php
/**
* American TESOL — "Latest in TESOL and English teaching" briefing.
*
* Save this file at your web root as ati-tesol-updates.php, then include it once
* on the page where the briefing should appear:
*
* <?php include $_SERVER['DOCUMENT_ROOT'] . '/ati-tesol-updates.php'; ?>
*
* Nothing in this file needs editing again. The TESOL paragraph and the newest
* teach-abroad guide are read from the portal.
*/
$updates_endpoint = 'https://americantesol.base44.app/functions/getTesolUpdate';
$abroad_endpoint = 'https://americantesol.base44.app/functions/getTeachAbroad';
$abroad_base = 'https://atesol.ai/teach-abroad';
function ati_e($value) {
return htmlspecialchars((string) $value, ENT_QUOTES, 'UTF-8');
}
function ati_fetch($url) {
$context = stream_context_create(array('http' => array('timeout' => 6, 'header' => "Accept: application/json\r\n")));
$raw = @file_get_contents($url, false, $context);
if ($raw === false) {
return null;
}
$payload = json_decode($raw, true);
return is_array($payload) ? $payload : null;
}
// The guide bodies arrive as HTML. Only the opening paragraph is shown.
function ati_first_paragraph($html) {
$html = (string) $html;
$text = preg_match('/<p[^>]*>(.*?)<\/p>/is', $html, $match) ? $match[1] : $html;
$text = preg_replace('/<[^>]+>/', ' ', $text);
$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
return trim(preg_replace('/\s+/', ' ', $text));
}
$updates_payload = ati_fetch($updates_endpoint);
$update = ($updates_payload && !empty($updates_payload['update'])) ? $updates_payload['update'] : null;
$abroad_payload = ati_fetch($abroad_endpoint);
$article = ($abroad_payload && !empty($abroad_payload['article'])) ? $abroad_payload['article'] : null;
if (!$update && !$article) {
return; // Nothing published yet — show nothing for now.
}
$headline = ($update && !empty($update['headline'])) ? $update['headline'] : '';
$paragraph = ($update && !empty($update['paragraphs'])) ? $update['paragraphs'][0] : '';
$article_url = ($article && !empty($article['slug'])) ? $abroad_base . '/' . rawurlencode($article['slug']) : $abroad_base;
$article_paragraph = $article ? ati_first_paragraph($article['html']) : '';
$update_schema = null;
if ($update) {
$update_schema = array(
'@context' => 'https://schema.org',
'@type' => 'Article',
'headline' => $headline,
'description' => $paragraph,
'articleBody' => $paragraph,
'keywords' => implode(', ', !empty($update['topics']) ? $update['topics'] : array()),
'publisher' => array('@type' => 'Organization', 'name' => 'American TESOL Institute', 'url' => 'https://americantesol.com'),
);
if (!empty($update['generated_date'])) {
$update_schema['datePublished'] = $update['generated_date'];
$update_schema['dateModified'] = $update['generated_date'];
}
$citations = array();
foreach (!empty($update['sources']) ? $update['sources'] : array() as $item) {
if (!empty($item['url'])) {
$citations[] = $item['url'];
}
}
if ($citations) {
$update_schema['citation'] = $citations;
}
}
$guide_schema = null;
if ($article) {
$guide_schema = array(
'@context' => 'https://schema.org',
'@type' => 'Article',
'headline' => $article['headline'],
'description' => !empty($article['meta_description']) ? $article['meta_description'] : '',
'articleBody' => $article_paragraph,
'url' => $article_url,
'publisher' => array('@type' => 'Organization', 'name' => 'American TESOL Institute', 'url' => 'https://americantesol.com'),
);
if (!empty($article['published_date'])) {
$guide_schema['datePublished'] = $article['published_date'];
$guide_schema['dateModified'] = $article['published_date'];
}
}
?>
<div id="ati-tesol-updates">
<style>
/* Layout only — fonts, colors and sizes come from the page itself. */
#ati-tesol-updates { font: inherit; color: inherit; }
#ati-tesol-updates .ati-update-title { font-size: 1.25em; line-height: 1.35; }
#ati-tesol-updates .ati-update-meta { font-size: 0.9em; }
#ati-tesol-updates .ati-update-meta a { text-decoration: underline; }
#ati-tesol-updates .ati-guide { margin-top: 1.5em; padding-top: 1.5em; border-top: 1px solid currentColor; }
#ati-tesol-updates .ati-guide-solo { margin-top: 0; padding-top: 0; border-top: none; }
</style>
<?php if ($update): ?>
<article class="ati-update">
<h2 class="ati-update-title"><?php echo ati_e($headline); ?></h2>
<?php if ($paragraph): ?>
<p><?php echo ati_e($paragraph); ?></p>
<?php endif; ?>
</article>
<?php endif; ?>
<?php if ($article): ?>
<article class="ati-guide<?php echo $update ? '' : ' ati-guide-solo'; ?>">
<h2 class="ati-update-title"><?php echo ati_e($article['headline']); ?></h2>
<?php if ($article_paragraph): ?>
<p><?php echo ati_e($article_paragraph); ?></p>
<?php endif; ?>
<p class="ati-update-meta"><a href="<?php echo ati_e($article_url); ?>" target="_blank" rel="noopener noreferrer">Read the full guide on teaching English in <?php echo ati_e($article['country']); ?></a></p>
</article>
<?php endif; ?>
<?php if ($update_schema): ?>
<script type="application/ld+json"><?php echo str_replace('</', '<\/', json_encode($update_schema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); ?></script>
<?php endif; ?>
<?php if ($guide_schema): ?>
<script type="application/ld+json"><?php echo str_replace('</', '<\/', json_encode($guide_schema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); ?></script>
<?php endif; ?>
</div>
JavaScript snippet
For pages you would rather not touch on the server: paste this once and it fetches the briefing into the page.
<!-- American TESOL — latest TESOL & English teaching updates (loads the current briefing by itself) -->
<div id="ati-tesol-updates">
<style>
/* Layout only — fonts, colors and sizes are inherited from the page itself. */
#ati-tesol-updates { font: inherit; color: inherit; }
#ati-tesol-updates .ati-update-title { font-size: 1.25em; line-height: 1.35; }
#ati-tesol-updates .ati-update-meta { font-size: 0.9em; }
#ati-tesol-updates .ati-update-meta a { text-decoration: underline; }
#ati-tesol-updates .ati-guide { margin-top: 1.5em; padding-top: 1.5em; border-top: 1px solid currentColor; }
#ati-tesol-updates .ati-guide-solo { margin-top: 0; padding-top: 0; border-top: none; }
</style>
<article class="ati-update"></article>
<article class="ati-guide"></article>
<script>
(function () {
var UPDATES_API = 'https://americantesol.base44.app/functions/getTesolUpdate';
var ABROAD_API = 'https://americantesol.base44.app/functions/getTeachAbroad';
var ABROAD_BASE = 'https://atesol.ai/teach-abroad';
var host = document.getElementById('ati-tesol-updates');
if (!host) return;
function esc(value) {
return String(value == null ? '' : value).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
}
// The guide bodies arrive as HTML. Only the opening paragraph is shown.
function firstParagraph(html) {
var match = String(html == null ? '' : html).match(/<p[^>]*>([\s\S]*?)<\/p>/i);
var body = match ? match[1] : String(html == null ? '' : html);
var holder = document.createElement('div');
holder.innerHTML = body;
return (holder.textContent || holder.innerText || '').replace(/\s+/g, ' ').trim();
}
function getJson(url) {
return fetch(url).then(function (response) { return response.json(); });
}
// Article structured data, kept in step with the text on the page.
function addSchema(data) {
var tag = document.createElement('script');
tag.type = 'application/ld+json';
tag.textContent = JSON.stringify(data);
host.appendChild(tag);
}
function renderUpdate(update) {
if (!update || !update.paragraphs || !update.paragraphs.length) return;
var node = host.querySelector('.ati-update');
if (!node) return;
var html = '<h2 class="ati-update-title">' + esc(update.headline) + '</h2>';
html += '<p>' + esc(update.paragraphs[0]) + '</p>';
node.innerHTML = html;
addSchema({
'@context': 'https://schema.org',
'@type': 'Article',
headline: update.headline,
description: update.paragraphs[0],
articleBody: update.paragraphs[0],
keywords: (update.topics || []).join(', '),
datePublished: update.generated_date,
dateModified: update.generated_date,
citation: (update.sources || []).filter(function (item) { return item && item.url; }).map(function (item) { return item.url; }),
publisher: { '@type': 'Organization', name: 'American TESOL Institute', url: 'https://americantesol.com' }
});
}
function renderGuide(article, hasUpdate) {
if (!article) return;
var node = host.querySelector('.ati-guide');
if (!node) return;
if (!hasUpdate) node.className = 'ati-guide ati-guide-solo';
var url = article.slug ? ABROAD_BASE + '/' + encodeURIComponent(article.slug) : ABROAD_BASE;
var body = firstParagraph(article.html);
var html = '<h2 class="ati-update-title">' + esc(article.headline) + '</h2>';
if (body) html += '<p>' + esc(body) + '</p>';
html += '<p class="ati-update-meta"><a href="' + esc(url) + '" target="_blank" rel="noopener noreferrer">Read the full guide on teaching English in ' + esc(article.country) + '</a></p>';
node.innerHTML = html;
addSchema({
'@context': 'https://schema.org',
'@type': 'Article',
headline: article.headline,
description: article.meta_description,
articleBody: body,
url: url,
datePublished: article.published_date,
dateModified: article.published_date,
publisher: { '@type': 'Organization', name: 'American TESOL Institute', url: 'https://americantesol.com' }
});
}
Promise.all([getJson(UPDATES_API), getJson(ABROAD_API)])
.then(function (results) {
var update = results[0] && results[0].update;
renderUpdate(update);
renderGuide(results[1] && results[1].article, !!update);
})
.catch(function () {});
})();
</script>
</div>
What it shows
Latest Trends in Artificial Intelligence and Multilingual Classroom Assessment
A significant development in language education is the evolving role of educators using generative artificial intelligence in task-based language teaching. According to an October 2026 article published by Cambridge University Press, tools like ChatGPT and Claude offer unprecedented opportunities to generate leveled language tasks and simulate authentic communicative scenarios. However, researchers caution that while artificial intelligence can scale personalized practice, the emotional and ethical labor of teaching cannot be automated. Instead of being replaced, educators are encouraged to assume new pedagogical roles. Teachers must act as facilitators who guide students through the mechanics of language while ensuring that classroom interactions remain deeply human and focused on genuine communication. For professionals at the American TESOL Institute and beyond, this highlights a shift toward balancing technological affordances with essential human connection.
Teach English in Bolivia: Essential 2026–2027 Guide to Salaries, Visas, and Culture
Stepping into Bolivia as an international educator in the 2026–2027 academic year offers a profound encounter with one of South America's most culturally distinct nations. Teaching here is less about high-volume corporate ESL networks and more about meaningful community engagement. From the high-altitude bustle of La Paz to the tropical plains of Santa Cruz, classroom life reflects a country undergoing steady social evolution while preserving its rich indigenous heritage.