Build the title, description, ticker focus, thumbnail, visibility, and SEO signals before you publish. When you hit publish, StockMarketLoop creates the watch page and recommendation-ready video record automatically.
Join StockmarketloopSign in to post, vote sentiment, save watchlists and view member tools.
Welcome to Stockmarketloop
Join the market loop before you post.Create a verified profile, save watchlists, vote sentiment, follow traders, earn badges, and keep your session active on this device.
By continuing, you agree to use Stockmarketloop for market discussion and watchlist tools. Financial posts are not investment advice.
Build the title, description, ticker focus, thumbnail, visibility, and SEO signals before you publish. When you hit publish, StockMarketLoop creates the watch page and recommendation-ready video record automatically.
' + watchUrl + '',
embedCode: ''
};
}
function errors() {
var out = [];
if (!draft.filePreviewName && !draft.upload) {
out.push('Choose a video file first.');
}
if (!String(draft.title || '').trim()) {
out.push('Add a title before publishing.');
}
if (String(draft.title || '').length > 100) {
out.push('Titles must stay under 100 characters.');
}
if (!String(draft.description || '').trim()) {
out.push('Add a description so the watch page and search previews are not empty.');
}
if (String(draft.description || '').length > 5000) {
out.push('Descriptions must stay under 5,000 characters.');
}
if (!cashtag(draft.ticker)) {
out.push('Add a primary ticker so recommendations and internal linking can classify the video.');
}
if (tokenList(draft.hashtags, true).length > 5) {
out.push('Use five hashtags or fewer.');
}
if (draft.visibility === 'scheduled' && (!draft.publishDate || !draft.publishTime)) {
out.push('Scheduled videos need a publish date and time.');
}
return out;
}
function statusMarkup(tone, text) {
return '
' + esc(text || '') + '
';
}
function fileSummaryMarkup() {
if (!draft.filePreviewName && !draft.upload) {
return '';
}
var mime = (draft.upload && draft.upload.mime) || '';
var label = mime && mime.indexOf('video/') === 0 ? 'Video' : 'Upload';
return ''
+ '
'
+ '
' + esc(label) + '
'
+ '
'
+ ' ' + esc(draft.filePreviewName || (draft.upload && draft.upload.name) || 'Selected video') + ''
+ ' ' + esc(draft.filePreviewSize || 'Ready to upload') + ''
+ ' The publish step will create the Chart post, watch page, and recommendation-ready video record.'
+ '
'
+ '
';
}
function thumbPreviewMarkup() {
var src = draft.thumbUrl || cfg.defaultThumbnail || '';
return ''
+ '
'
+ (src ? '' : '
Upload a 16:9 image
')
+ '
';
}
function stepMarkup() {
var data = metadataOutputs();
switch (draft.step) {
case 0:
return ''
+ '
'
+ ' '
+ ' Choose the video file first'
+ '
This uploader keeps the flow similar to a creator platform: file first, then title, ticker, thumbnail, search metadata, visibility, and publish.
'
+ ' '
+ ' '
+ fileSummaryMarkup()
+ ' '
+ '
';
case 1:
return ''
+ '
'
+ '
'
+ '
Keep it sharp and market-specific.
'
+ '
This becomes a cashtag on the watch page and helps recommendations.
'
+ '
'
+ '
The first two lines do most of the work for SEO, previews, and recommendations.
'
+ '
'
+ ' '
+ ' '
+ '
'
+ '
'
+ thumbPreviewMarkup()
+ '
'
+ '
Use a 16:9 image so the watch page, search cards, and shares stay clean.
'
+ '
Tags help with aliases, misspellings, and topic clustering.
'
+ '
Use 2 to 4 focused hashtags.
'
+ '
'
+ '
'
+ '
';
case 2:
return ''
+ '
'
+ '
Leave blank to auto-generate from the title and ticker.
'
+ '
The final watch page URL is set on publish. This preview helps you shape the share copy now.
The old route was dead. This upload studio now gathers the metadata the StockMarketLoop watch pages, search previews, and video recommendation service actually need.
'
+ '
';
}
function loggedOutMarkup() {
return ''
+ '
'
+ '
Sign in to upload
'
+ '
Creators need to be signed in before they can upload a video, attach the right title and ticker metadata, and generate a watch page that can actually be crawled.
';
}
function renderStatus() {
if (publishing) {
return statusMarkup('warn', 'Publishing video, creating the Chart post, and generating the watch page...');
}
var issues = errors();
if (!issues.length) {
return statusMarkup('good', 'Metadata looks healthy. This upload is ready to publish into the watch-page system.');
}
return statusMarkup('warn', issues[0]);
}
function render() {
normalizeDraft();
if (!cfg.loggedIn) {
root.innerHTML = loggedOutMarkup();
return;
}
var issues = errors();
root.innerHTML = ''
+ '