{"id":71945,"date":"2026-07-27T06:25:05","date_gmt":"2026-07-26T22:25:05","guid":{"rendered":"https:\/\/sgbuzz.com\/?p=71945"},"modified":"2026-07-27T06:25:05","modified_gmt":"2026-07-26T22:25:05","slug":"osome-eyes-the-next-wave-of-ai-companies-choosing-singapore","status":"publish","type":"post","link":"https:\/\/sgbuzz.com\/?p=71945","title":{"rendered":"Osome Eyes the Next Wave of AI Companies Choosing Singapore"},"content":{"rendered":"<p><br \/>\n<\/p>\n<div>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">SINGAPORE, HONG KONG and LONDON, July 27, 2026 \/PRNewswire\/ &#8212; Osome, the AI company management platform trusted by more than 50,000 tech founders and solopreneurs globally, is strengthening its support for the next wave of AI companies choosing Singapore as their regional base.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">Singapore&#8217;s appeal continues to grow as leading AI companies establish a stronger presence. <a href=\"https:\/\/www.edb.gov.sg\/en\/about-edb\/media-releases-publications\/openai-launches-applied-ai-lab-in-singapore.html\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">OpenAI<\/a> has committed S$300 million (US$234 million) to the country&#8217;s AI ecosystem, while <a href=\"https:\/\/cognition.com\/blog\/singapore\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">Cognition<\/a> has established its APAC headquarters there. Anthropic and Tencent are also increasing their presence in Singapore.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\"><a href=\"https:\/\/www.edb.gov.sg\/en\/business-insights\/insights\/singapores-next-growth-chapter-what-international-businesses-should-know-from-budget-2026.html\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">Budget 2026<\/a> reinforces this momentum with a National AI Impact Programme, a new Kampong AI hub at one-north, and a 400% tax deduction on qualifying AI investments. Foreign companies can access these incentives by incorporating a Private Limited Company, which allows 100% foreign ownership and startup tax rates as low as 10% under the <a href=\"https:\/\/www.mof.gov.sg\/policies\/taxes\/corporate-income-tax\/\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">Startup Tax Exemption<\/a>.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">As more AI-native startups choose Singapore to build lean, global businesses, <a href=\"https:\/\/osome.com\/\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">Osome<\/a> helps founders navigate the process. Operating across Singapore, Hong Kong, the UK, and the UAE, it enables founders to incorporate a company as fast as 7 days while managing back-office operations, including accounting, bookkeeping, and compliance.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">Building on that support, Osome recently launched its <a href=\"https:\/\/www.youtube.com\/watch?v=sFs18XinlVE\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">Model Context Protocol (MCP)<\/a> server, turning founders&#8217; preferred AI assistants into a business command center. Through Claude, ChatGPT, and Gemini, founders can securely retrieve transactions, shareholder records, financial reports, and other company data from a single AI interface.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">AI-native &amp; tech founders are already building with Osome. <a href=\"https:\/\/osome.com\/sg\/customer-stories\/up-n-comer\/\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">UpNComer<\/a>&#8216;s founder, Karan Dasgupta, incorporated his Singapore company within days of switching to Osome, saving &#8220;easily 20 hours&#8221; every month. Dubai-based <a href=\"https:\/\/osome.com\/sg\/customer-stories\/aesty\/\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">Aesty<\/a> and Hong Kong&#8217;s <a href=\"https:\/\/osome.com\/hk\/customer-stories\/angelflow\/\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">Angelflow<\/a> have reported similar gains, cutting bookkeeping from around a week of work to just two hours a month.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">Eugenio Ferrante, CEO of Osome, said: &#8220;A few years ago, building a global company required a 500-person team and a massive regional office. Today, a three-person AI startup can operate globally from Singapore with a laptop. The biggest threat isn&#8217;t competition, but administrative drag. With our new MCP server, you can manage your company&#8217;s finance and compliance via your AI assistant, leaving you free to focus on building and serving customers.&#8221;<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\"><b>About Osome<\/b><\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">Osome is an AI company-management platform combining human expertise with automation for incorporation, accounting and tax compliance. Since 2017, it has served 50,000+ startups in Singapore, Hong Kong, the UK and the UAE. Learn more at <a href=\"http:\/\/osome.com\/\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">osome.com<\/a>.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">** This press release is distributed by PR Newswire through automated distribution system, for which the client assumes full responsibility. **<\/p>\n<p>      <a href=\"https:\/\/image.bastillepost.com\/599x\/wp-content\/uploads\/global\/2026\/07\/media2_3007785_SEA__Photo.jpg.webp\" class=\"image-lightbox\" data-fancybox=\"gallery-mainpost\" data-caption=\"Osome Eyes the Next Wave of AI Companies Choosing Singapore\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/image.bastillepost.com\/599x\/wp-content\/uploads\/global\/2026\/07\/media2_3007785_SEA__Photo.jpg.webp\" alt=\"Osome Eyes the Next Wave of AI Companies Choosing Singapore\"\/><\/p>\n<p class=\"caption font-size-scaler-control\" data-font=\"14\">Osome Eyes the Next Wave of AI Companies Choosing Singapore<\/p>\n<p>      <\/a><\/p><\/div>\n<div>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\"><b><a href=\"https:\/\/www.instagram.com\/stories\/angela_nikolau\/3949966567957518549\/?utm_source=ig_story_item_share&amp;igsh=MXhvZTI3d2dyYTRtNA%3D%3D\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">The couple said on social media<\/a> that they will soon go live on <a href=\"https:\/\/gosh.com\/zh-Hans\/15851439\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">Gosh Live<\/a> to talk about life after the Empire State Building incident and the questions they want to answer directly.<\/b><\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\"><b>Safety note:<\/b> <a href=\"https:\/\/gosh.com\/zh-Hans\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">Gosh<\/a> does not encourage or endorse dangerous, illegal or unauthorised activities. The livestream is intended solely as an entertainment and community interaction session.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">NEW YORK, July 27, 2026 \/PRNewswire\/ &#8212; <a href=\"https:\/\/www.instagram.com\/angela_nikolau?igsh=OGhlZXJhbmpmYm54\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">Angela Nikolau<\/a> and <a href=\"https:\/\/www.instagram.com\/beerkus\/?hl=en\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">Ivan Beerkus<\/a>, the creator couple known for rooftopping and high-altitude visual content, first gained attention through their daring shoots on skyscrapers, city landmarks and extreme urban locations around the world. Their content brings together adventure, striking visuals and their relationship story in the same frame. Their journey was later featured in the Netflix documentary <i>Skywalkers: A Love Story<\/i>, introducing them to an even wider audience.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">Recently, Angela and Ivan became the focus of media and social media discussion following the Empire State Building incident in New York. According to public reports, the couple were taken into police custody after climbing the Empire State Building and allegedly completing a proposal, and now face related charges. Since then, fans have been following updates on their situation, the legal aftermath and whether the couple would respond publicly.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">Following the controversy, Angela and Ivan have chosen to face fans directly through a <a href=\"https:\/\/gosh.com\/zh-Hans\/15851439\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">livestream<\/a>, where they are expected to talk about the Empire State Building incident, what they have been going through, and the questions they have wanted to address themselves.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">According to the preview shared on their social media accounts, the livestream will take place on Gosh Live. Compared with a formal interview, the stream is expected to be a more relaxed online social and entertainment setting, where fans can watch, chat and hear directly from the couple.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">During the livestream, Angela and Ivan are expected to discuss life after the Empire State Building incident. They may also talk about their relationship, future plans and whether they will continue creating rooftopping-related content.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">The livestream is scheduled to begin on <b>July 26, 2026, at 9:00 p.m. UTC<\/b> and will be available on the <b><a href=\"https:\/\/gosh.com\/zh-Hans\/15851439\" target=\"_blank\" rel=\"nofollow noopener\" style=\"color: #0000FF\">official Gosh Live page<\/a><\/b>.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">For fans who have been following Angela and Ivan, the livestream could be a rare opportunity to hear the couple speak directly about their situation after the controversy.<\/p>\n<p style=\"font-weight: 400;\" class=\"font-size-scaler-control\" data-font=\"16\">** This press release is distributed by PR Newswire through automated distribution system, for which the client assumes full responsibility. **<\/p>\n<p>      <a href=\"https:\/\/image.bastillepost.com\/600x\/wp-content\/uploads\/global\/2026\/07\/media_MS1958625_20260726151336EDT_image_1.jpg.webp\" class=\"image-lightbox\" data-fancybox=\"gallery-nextpost\" data-caption=\"After Arrest Controversy, &quot;Empire State Building Couple&quot; Angela Nikolau and Ivan Beerkus to Address Recent Incident on Gosh Live\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/image.bastillepost.com\/600x\/wp-content\/uploads\/global\/2026\/07\/media_MS1958625_20260726151336EDT_image_1.jpg.webp\" alt=\"After Arrest Controversy, &quot;Empire State Building Couple&quot; Angela Nikolau and Ivan Beerkus to Address Recent Incident on Gosh Live\"\/><\/p>\n<p class=\"caption font-size-scaler-control\" data-font=\"14\">After Arrest Controversy, &#8220;Empire State Building Couple&#8221; Angela Nikolau and Ivan Beerkus to Address Recent Incident on Gosh Live<\/p>\n<p>      <\/a><\/p><\/div>\n<p><script>\n        !function(f,b,e,v,n,t,s)\n        {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n            n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n            if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n            n.queue=[];t=b.createElement(e);t.async=!0;\n            t.src=v;s=b.getElementsByTagName(e)[0];\n            s.parentNode.insertBefore(t,s)}(window, document,'script',\n            'https:\/\/connect.facebook.net\/en_US\/fbevents.js');\n        fbq('init', '2014126905534741');\n        fbq('track', 'PageView');\n    <\/script><script>\n            window.app = {\n                constants: {\n                    UUID_KEY: 'AIMPID',\n                    FONT_SIZE_SCALE: 'FONT_SIZE_SCALE',\n                },\n                seoDimensionObj: {\n                    title: 'Osome Eyes the Next Wave of AI Companies Choosing Singapore',\n                    section: '',\n                    pagePath: 'https:\/\/www.bastillepost.com\/global\/article\/6038390-osome-eyes-the-next-wave-of-ai-companies-choosing-singapore',\n                },\n                ajax: jQuery.ajax,\n                helpers: {\n                    bindVideoListEvent: function(players, jqElement) {\n                        jqElement.find('video.bp-video-js').each(function() {\n                            var options = {\n                                controls: true,\n                                autoplay: false,\n                                preload: \"none\",\n                                width: \"100%\",\n                                fluid: true,\n                                aspectRatio: \"704:369\",\n                            };\n                            var domOptions = $(this).data('videojs');\n                            if (domOptions) {\n                                options = Object.assign(options, domOptions);\n                            }\n                            var player = videojs(this, options);\n                            var currentIndex = players.length;\n                            player.on('play', function() {\n                                console.log(`player ${currentIndex} play`);\n                                for (var i = 0; i < players.length; i++) {\n                                    if (i !== currentIndex) {\n                                        players[i].pause();\n                                    }\n                                }\n                            });\n                            players.push(player);\n                        });\n\n                        \/\/ Post list video can not jump\n                        jqElement.find('.bppost-title').click(function() {\n                            var a = $(this).parent('.bppost-item');\n                            var href = a.attr('href');\n                            if (href) {\n                                location.href = href;\n                            }\n                        });\n                    },\n                    showHotList: function(id) {\n                        jQuery('.bp-hot-list').css('display', 'none');\n                        jQuery('#' + id).css('display', 'block');\n                        jQuery('.bp-hot-list-btn').removeClass('active')\n                        jQuery('.bp-hot-list-btn.' + id).addClass('active')\n                    },\n                    getStorage: function(key){\n                        var val=null;\n                        try{\n                            val = localStorage.getItem(key);\n                        } catch(error){}\n                        if(val==null){\n                            val = window.app.helpers.getCookie(key,null);\n                        }\n                        return val;\n                    },\n                    setStorage: function(key, val){\n                        try{\n                            localStorage.setItem(key, val);\n                            window.app.helpers.setCookie(key, val, 30);\n                        } catch(error){\n                        }\n                    },\n                    setCookie: function(name, value, days, domain) {\n                        if(typeof(domain)==='undefined') {\n                            domain = '';\n                        }\n\n                        var exp = new Date();\n                        exp.setTime(exp.getTime() + days*24*60*60*1000);\n\n                        if (!domain) {\n                            document.cookie = name + \"=\" + value + \";expires=\" + exp.toGMTString() + \";path=\/\";\n                        } else {\n                            document.cookie = name + \"=\" + value + \";expires=\" + exp.toGMTString() + \";path=\/\" + \";domain=\" + domain;\n                        }\n                    },\n                    getCookie: function(name,defValue){\n                        var arr = document.cookie.match(new RegExp(\"(^| )\" + name + \"=([^;]*)(;|$)\"));\n\n                        if (arr != null) {\n                            return arr[2];\n                        }\n\n                        return defValue ? defValue : '';\n                    },\n                    generateUUID: function() {\n                        var s4 = function() {\n                            return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n                        }\n\n                        return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n                    },\n                    setUUID: function() {\n                        var uuid = window.app.helpers.generateUUID();\n\n                        window.app.helpers.setStorage(window.app.constants.UUID_KEY, uuid);\n\n                        return uuid;\n                    },\n                    refreshLiveInfo: function () {\n                        var now = new Date();\n                        var year = now.getFullYear();\n                        var month = now.getMonth() + 1;\n                        var dayOfMonth = now.getDate();\n                        var dayOfWeek = now.getDay();\n\n                        var dateEle = jQuery('.live-info .date');\n                        dateEle.text(`${year}-${month}-${dayOfMonth}-`);\n                        dateEle.css('opacity', '1');\n\n                        var dayOfWeekMap = {\n                            1: 'Monday',\n                            2: 'Tuesday',\n                            3: 'Wednesday',\n                            4: 'Thursday',\n                            5: 'Friday',\n                            6: 'Saturday',\n                            7: 'Sunday',\n                        };\n                        var dayEle = jQuery('.live-info .day');\n                        dayEle.text(dayOfWeekMap[dayOfWeek]);\n                        dayEle.css('opacity', '1');\n                    },\n                    preventUserSaveImgs: function(elements) {\n                        var fn = function() { return false };\n                        elements.each(function() {\n                            this.oncontextmenu = fn;\n                        });\n                    },\n                    getQueryParameter(query, key) {\n                        var results = new RegExp('[\\?&#038;]' + key + '=([^&#038;#]*)').exec(query);\n\n                        return (results !== null) ? results[1] || '' : '';\n                    },\n                },\n                fontSizeScaler: {\n                    init: function() {\n                        const scaler = $('.font__size__scaler__container .scaler');\n                        let rate = window.app.fontSizeScaler._getRate();\n                        scaler.val(rate);\n                        const percent = window.app.fontSizeScaler._calculatePercent(scaler, rate);\n\n                        window.app.fontSizeScaler._updateUI(rate, percent);\n\n                        scaler.bind('input', function() {\n                            const input = $(this);\n                            const rate = parseFloat(input.val());\n                            const percent = window.app.fontSizeScaler._calculatePercent(input, rate);\n\n                            window.app.helpers.setStorage(window.app.constants.FONT_SIZE_SCALE, rate);\n\n                            window.app.fontSizeScaler._updateUI(rate, percent);\n                        });\n                    },\n                    refreshUI: function() {\n                        const scaler = $('.font__size__scaler__container .scaler');\n                        let rate = window.app.fontSizeScaler._getRate();\n                        const percent = window.app.fontSizeScaler._calculatePercent(scaler, rate);\n                        window.app.fontSizeScaler._updateUI(rate, percent);\n                    },\n                    _calculatePercent: function(input, rate) {\n                        const min = input.attr('min');\n                        const max = input.attr('max');\n\n                        return ((rate - min) \/ (max - min)) * 100;\n                    },\n                    _getRate: function() {\n                        let rate = window.app.helpers.getStorage(window.app.constants.FONT_SIZE_SCALE);\n                        if (!rate) {\n                            rate = 100;\n                        } else {\n                            rate = parseFloat(rate);\n                        }\n\n                        return rate;\n                    },\n                    _updateUI: function(rate, percent) {\n                        $('.font__size__scaler__container .scaler').css( 'background-size', percent + '% 100%');\n\n                        const DEFAULT_FONT_SIZE = 16;\n                        \/\/ rate from 80 ~ 200, mean 80% ~ 200%\n                        const scale = rate \/ 100;\n                        $('.font__size__scaler__container .font__size__scale').css('font-size', `${(DEFAULT_FONT_SIZE * scale).toFixed(0)}px`);\n\n                        $('.font-size-scaler-control').each(function() {\n                            const self = $(this);\n                            let fontSize = self.data('font');\n                            if (!fontSize) {\n                                fontSize = `${DEFAULT_FONT_SIZE}px`;\n                            }\n                            let realFontSize = parseInt(fontSize.toString().replace('px', ''));\n                            if (!realFontSize) {\n                                realFontSize = DEFAULT_FONT_SIZE;\n                            }\n                            let resultFontSize = realFontSize * scale;\n                            let maxFontSize = parseInt(self.data('font-max'), 10);\n                            if (maxFontSize &#038;&#038; maxFontSize > 0) {\n                                if (resultFontSize > maxFontSize) {\n                                    resultFontSize = maxFontSize;\n                                }\n                            }\n                            self.css('font-size', `${resultFontSize}px`);\n                        });\n                    },\n                },\n                isGoogleTagManagerInit: false,\n                initGoogleTagManager: function() {\n                    if (window.app.isGoogleTagManagerInit) {\n                       return;\n                    }\n                    window.app.isGoogleTagManagerInit = true;\n                    <!-- Google Tag Manager -->\n                    (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n                            new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n                        j=d.createElement(s),dl=l!='dataLayer'?'&l=\"+l:\"';j.async=true;j.src=\"https:\/\/www.googletagmanager.com\/gtm.js?id=\"+i+dl;f.parentNode.insertBefore(j,f);\n                    })(window,document,'script','dataLayer','GTM-MHLNCKH4');\n                    <!-- End Google Tag Manager -->\n                    <!-- GA Tag -->\n                    \/\/ (function(i, s, o, g, r, a, m) {\n                    \/\/         i['GoogleAnalyticsObject'] = r;\n                    \/\/         i[r] = i[r] || function() {\n                    \/\/             (i[r].q = i[r].q || []).push(arguments)\n                    \/\/         }\n                    \/\/             ,\n                    \/\/             i[r].l = 1 * new Date();\n                    \/\/         a = s.createElement(o),\n                    \/\/         m = s.getElementsByTagName(o)[0];\n                    \/\/         a.async = 1;\n                    \/\/         a.src = g;\n                    \/\/         m.parentNode.insertBefore(a, m)\n                    \/\/     }\n                    \/\/ )(window, document, 'script', 'https:\/\/www.google-analytics.com\/analytics.js', 'ga');\n                    \/\/ window.ga('create', 'UA-45475522-1', 'auto');\n                    <!-- End GA Tag-->\n                },\n                pageImpression: function(source, triggerType) {\n                    \/\/dimension1\tsection: Category Name (\u9996\u9801,\u535a\u5ba2\u699c,{\u535a\u5ba2\u540d\u7a31},{\u5206\u985e\u540d\u7a31},\u9801\u9762)\n                    \/\/dimension2\tsource: homepage, category, post, blogger, author, readmore, carousel\n                    \/\/dimension3\tproduct: desktop-web, mobile-web, ios, android, huawei, facebook\n                    var dataLayer = window.dataLayer = window.dataLayer || [];\n                    var product = $(window).width() < 1024 ? 'mobile-web' : 'desktop-web';\n\n                    var title = `${window.app.seoDimensionObj.title}|${product}`;\n\n                    var pageImpression = {\n                        'event': 'page_view',\n                        'pageTitle': title,\n                        'pageSection': window.app.seoDimensionObj.section,\n                        'pageSource': source,\n                        'bpProduct': product,\n                        'pagePath': window.app.seoDimensionObj.pagePath,\n                        'referURL': document.referrer,\n                        'triggerType': triggerType || 'auto', \/\/ auto\n                    };\n                    dataLayer.push(pageImpression);\n\n                    var pathname = (new URL(pageImpression.pagePath)).pathname;\n                    var ga4PageImpression = {\n                        page: pathname,\n                        hitType: 'pageview',\n                        title: pageImpression.pageTitle,\n                        dimension1: pageImpression.pageSection,\n                        dimension3: pageImpression.pageSource,\n                        dimension4: pageImpression.bpProduct,\n                    }\n\n                    window.app.initGoogleTagManager();\n\n                    \/\/ window.ga('send', ga4PageImpression);\n\n                    console.log('dataLayer', pageImpression, 'ga', ga4PageImpression);\n                },\n                adUnits: null,\n                checkVideoPlayersRegion: function() {\n                    if (!window.videojs) {\n                        console.log('checkVideoPlayersRegion: VideoJS not loaded');\n                        return;\n                    }\n\n                    const players = videojs.getPlayers();\n                    const streamPlayers = [];\n                    for (const playerName in players) {\n                        const player = players[playerName];\n\n                        const sources = player.currentSources();\n                        for (let i = 0; i < sources.length; i++) {\n                            const src = sources[i];\n                            if (src.type === 'application\/x-mpegURL') {\n                                streamPlayers.push(player);\n                                break;\n                            }\n                        }\n                    }\n\n                    console.log('checkVideoPlayersRegion: has ' + streamPlayers.length + ' streaming players');\n\n                    if (streamPlayers.length > 0) {\n                        const ModalDialog = window.videojs.getComponent('ModalDialog');\n                        \/\/ \u4e34\u65f6\u4f7f\u7528, \u4ec5\u5141\u8bb8HK IP\u7684\u89c2\u770bVideo\n                        \/\/ window.app.ajax({\n                        \/\/     type: 'get',\n                        \/\/     url: '\/global\/api\/v1\/ip-to-region',\n                        \/\/     \/\/ url: 'https:\/\/test.bastillepost.com\/global\/api\/v1\/ip-to-region',\n                        \/\/     contentType: 'application\/json',\n                        \/\/     dataType: 'json',\n                        \/\/     success: function (resp) {\n                        \/\/         console.log('https:\/\/test.bastillepost.com', resp);\n                        \/\/\n                        \/\/         if (resp.code === 200) {\n                        \/\/             let isHongKongRegion = resp.data.regionInfo.province === '\u9999\u6e2f';\n                        \/\/\n                        \/\/             console.log('checkVideoPlayersRegion: isHongKongRegion = ' + isHongKongRegion);\n                        \/\/\n                        \/\/             \/\/ for debug\n                        \/\/             \/\/ isHongKongRegion = false;\n                        \/\/             if (!isHongKongRegion) {\n                        \/\/                 \/\/ Show Error Msg\n                        \/\/                 for (let i = 0; i < streamPlayers.length; i++) {\n                        \/\/                     const player = streamPlayers[i];\n                        \/\/\n                        \/\/                     const errorMessage = document.createElement('div');\n                        \/\/                     errorMessage.className=\"vjs-modal-dialog-content\";\n                        \/\/                     errorMessage.setAttribute('role', 'document');\n                        \/\/                     errorMessage.style.cssText = `font-size: 18px;\n                        \/\/                         vertical-align: middle;\n                        \/\/                         padding-top: 10%;\n                        \/\/                         background: black;\n                        \/\/                         color: white;\n                        \/\/                         text-align: center;\n                        \/\/                         position: absolute;\n                        \/\/                         top: 0;\n                        \/\/                         left: 0;\n                        \/\/                         width: 100%;\n                        \/\/                         height: 100%;\n                        \/\/                         display: flex;\n                        \/\/                         align-items: center;\n                        \/\/                         justify-content: center;\n                        \/\/                     `;\n                        \/\/                     errorMessage.textContent=\"\u62b1\u6b49\uff0c\u7531\u65bc\u7248\u6b0a\u9650\u5236\u60a8\u6240\u5728\u7684\u5730\u5340\u7121\u6cd5\u64ad\u653e\u6b64\u5f71\u7247\u3002\";\n                        \/\/\n                        \/\/                     var modal = new ModalDialog(player, {\n                        \/\/                         content: errorMessage,\n                        \/\/                         \/\/ description: '\u62b1\u6b49\uff0c\u7531\u65bc\u7248\u6b0a\u9650\u5236\u60a8\u6240\u5728\u7684\u5730\u5340\u7121\u6cd5\u64ad\u653e\u6b64\u5f71\u7247\u3002',\n                        \/\/                         fillAlways: true,\n                        \/\/                         temporary: false,\n                        \/\/                         uncloseable: true,\n                        \/\/                     });\n                        \/\/                     player.addChild(modal);\n                        \/\/                     modal.open();\n                        \/\/                 }\n                        \/\/             }\n                        \/\/         }\n                        \/\/     },\n                        \/\/     error: function () {\n                        \/\/     },\n                        \/\/ });\n                    }\n                },\n            };\n\n            jQuery(function() {\n                window.app.helpers.preventUserSaveImgs($('img'));\n\n                window.app.helpers.refreshLiveInfo();\n\n                window.app.helpers.showHotList('bp-hot-list-daily');\n\n                $('.scroll-top-wrapper').click(function() {\n                    window.scrollTo({top: 0, behavior: 'smooth'});\n                });\n\n                $('.header__home-btn').click(function() {\n                    location.href = \"https:\/\/www.bastillepost.com\/global\";\n                });\n\n                \/\/ PC Web other menus event\n                $('#bp-other-menus').hover(function() {\n                    $(this).find('.sub-menus').css('display', 'flex');\n                }, function() {\n                    $(this).find('.sub-menus').css('display', 'none');\n                });\n                $('.sub-menus>div').hover(function() {\n                    $(this).find('.sub-sub-menus').css('display', 'flex');\n                }, function() {\n                    $(this).find('.sub-sub-menus').css('display', 'none');\n                });\n                \/\/ Mobile Web Menus Dialog resize\n                var resizeMobileWebMenusDialog = function () {\n                    \/\/ var top = $(window).scrollTop() > 0 ? 86 : 150;\n                    var top = $(window).scrollTop() > 0 ? 86 : 86;\n                    $('body.menu-active .header__nav').css({'top': `${top}px`, 'height': `calc(100% - ${top}px)`})\n                }\n                $('.menu-btn').click(function() {\n                    resizeMobileWebMenusDialog();\n                });\n                \/\/ Mobile Web Search Bar\/Display Title auto switch\n                var mobileSearchBarEle = $('.header__search__mobile .search-slide');\n                var mobileDisplayTitleEle = $('.header__button-title.mobile-only');\n                setInterval(function() {\n                    var show = mobileSearchBarEle.css('display');\n                    if (show === 'none' || mobileSearchBarEle.hasClass('js-slide-hidden')) {\n                        mobileDisplayTitleEle.css('opacity', '1');\n                    } else {\n                        mobileDisplayTitleEle.css('opacity', '0');\n                    }\n                }, 200);\n                \/\/ Font Size Scaler\n                window.app.fontSizeScaler.init();\n                \/\/ fb like sdk\n                (function (d, s, id) {\n                    var js, fjs = d.getElementsByTagName(s)[0];\n                    if (d.getElementById(id)) return;\n                    js = d.createElement(s); js.id = id;\n                    js.async = true;\n                    js.src = \"https:\/\/connect.facebook.net\/en_US\/sdk.js#xfbml=1&version=v17.0&appId=301441893522755&autoLogAppEvents=1\";\n                    fjs.parentNode.insertBefore(js, fjs);\n                }(document, 'script', 'facebook-jssdk'));\n                \/\/ show alert_msg in url\n                const alertMsg = window.app.helpers.getQueryParameter(window.location.search, 'alert_msg');\n                if (alertMsg) {\n                    window.alert(decodeURIComponent(alertMsg));\n                }\n            });\n        <\/script><script async src=\"\/\/www.instagram.com\/embed.js\"><\/script><br \/>\n<br \/><br \/>\n<center><br \/>\n<br \/><a href=\"https:\/\/www.bastillepost.com\/global\/article\/6038390-osome-eyes-the-next-wave-of-ai-companies-choosing-singapore\" target=\"_blank\" rel=\"noopener\">Read Full Article At Source <\/a><br \/>\n<center\/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>SINGAPORE, HONG KONG and LONDON, July 27, 2026 \/PRNewswire\/ &#8212; Osome, the AI company management platform trusted by more than 50,000 tech founders and solopreneurs&#8230;<\/p>\n","protected":false},"author":1,"featured_media":71946,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[2611],"tags":[],"class_list":["post-71945","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-buzz-headlines","wpcat-2611-id"],"_links":{"self":[{"href":"https:\/\/sgbuzz.com\/index.php?rest_route=\/wp\/v2\/posts\/71945","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sgbuzz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sgbuzz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sgbuzz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sgbuzz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=71945"}],"version-history":[{"count":0,"href":"https:\/\/sgbuzz.com\/index.php?rest_route=\/wp\/v2\/posts\/71945\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sgbuzz.com\/index.php?rest_route=\/wp\/v2\/media\/71946"}],"wp:attachment":[{"href":"https:\/\/sgbuzz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=71945"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sgbuzz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=71945"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sgbuzz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=71945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}